-
字符流 1)编码问题 前已述及 起码有一点要非常清楚的是,一切进入计算机的都会变成字节码 2)认识文本和文本文件 java中的文本(其实就是char)16位的无符号整数,是字符的unicode编码(这是一种双自己编码) 文件是byte byte byte...的数据集合,可以缩句来理解 文件输数据集合。字节流的编码方式和序列化规则不一样就形成了不同的文件:文本文件,音频文件,视频文件等 文本文件是文本(char的编码)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的数据存储集合 (3)字符流 抽象类 Reader Writer 二者实现了数据的两种相互转换,存储时我们用字节码的形式存储,读入计算机内存处理(包括显示,运算等)是用字符(ABC...)的形式。 字符的处理,一次处理一个字符。其底层仍然是基本的字节序列 字符流的基本实现 InputStreamReader 完成byte流解析为char流,按照编码接卸 OutputStreamWriter 提供char流到byte流,按照编码处理。 为什么上面特别说明了一下文本文件,因为字符流大部分操作的都是文本文件。毕竟文本文编,以编码的方式不容易认读,我们才把字符编码解析为字符。如果Reader一个MP3之类的音频文件,根本就没有什么意义,因为,声音本来就不是用来看的,所以说字符流主要是用于处理文本文件的查看全部
-
public class FileUtil { public static void listDirectory(File dir)throws IOException{ if(!dir.isDirectory()){ throw new IllegalArgumentException(dir+"不是一个目录"); } if(!dir.exists()){ throw new IllegalArgumentException(dir+"不存在"); } //遍历目录下所有的子目录'文件,及子目录下的文件 通过递归实现 File []files=dir.listFiles();//返回子目录的抽像 if(files!=null&&files.length>0){ for(File file:files){ if(file.isDirectory()){ listDirectory(file); } else{ System.out.println(dir.getAbsolutePath()+file+" "); System.out.println(); } } } } }查看全部
-
BufferedInputStream&BufferedOutputStream 提供了带缓存区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能 从应用程序中把输入放入文件,相当于将一罐水倒入到另外一个罐中: FileOutputStream-->write()方法相当于一滴一滴地把水“转移”过去 DataOutputStream-->writeXxx()方法会方便一些,相当于一瓢一瓢把水“转移” BuffereOutputStream-->write()方法更方便,相当于一瓢一瓢先放入 桶中,在从桶中倒入到另外一个罐中 批量读取导入速度最快!<br> <br> 其他的不说,指一下讲错的地方。<br><br> 直接贴一下主要的程序<br><br> int len = 0;<br><br> byte[] buf = new byte[64];<br><br> //缓冲类的意义在于使用的字节数组不必很大,使用适当大的byte数组的Buffered方法,就可以与超过缓冲区大小(比如1M大)的byte数组的普通copyFile方法的效率相当。<br><br> while((len = bis.read(buf)) != -1){<br><br> bos.write(buf,0,len);<br><br> //此处不要加flush,否则会失去缓冲的意义<br><br> }查看全部
-
复制文件最快的做法是将批量读取到的字节数组使用缓冲写入到文件,在机器性能范围内字节数组越大越快 缓冲字节流这一节希望重新录更正错误,使用缓冲字节流复制确实是最快的方式,但对于小文件10M以下的文件体现不出优势,对于百兆文件正确使用,时间可以控制到50ms内。视频中的缓冲字节流使用有错误,复制文件最快的做法是将批量读取到的字节数组使用缓冲写入到文件,在机器性能范围内字节数组越大越快。在循环写入的过程中不需要使用flush,就像cwt8805说的,缓冲输入流在关闭的时候会将所有缓冲区的数据全部写入文件,使用flush刷新缓冲就失去了缓冲的意义。最后关闭IO流和文件流应该在finally中关闭,否则IO异常时执行不到close语句,IO流仍然没有关闭。查看全部
-
1、byte 类型 8 位,int 类型 32 位,为了避免数据转换错误,通过 & 0xff 将高 24 位清零 2、long time = System.currentTimeMillis() 当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量) 3、is.read() 单字节适合读取 小 文件 is.read(byte[] bytes,int star,int size) 字节数组适合读取 大 文件 读取文件最常用的是批量读取int bytes = fis.read(buf, 0 , buf.length); FileInputStream文件输入 单字节输入即不用数组。 /** * 批量读取,对大文件而言效率高,也是我们最常用的读文件的方式 * @Inparam fileName * @throws IOException */ public static void printHexByByteArray(String fileName)throws IOException{ FileInputStream in = new FileInputStream(fileName); byte[] buf = new byte[8 * 1024]; /*从in中批量读取字节,放入到buf这个字节数组中, * 从第0个位置开始放,最多放buf.length个 * 返回的是读到的字节的个数 */ int bytes = in.read(buf,0,buf.length);//一次性读完,说明字节数组足够大 int j = 1; for(int i = 0; i < bytes;i++){ System.out.print(Integer.toHexString(buf[i] & 0xff)+" "); if(j++%10==0){ System.out.println(); } }查看全部
-
file.list 遍历当前目录中所有的文件 返回字符串数组 不包含子目录下的文件 递归便利所有的目录查看全部
-
file.isDirectory 是否是一个目录 file.isFile 是否是一个文件 file.mkdirs 创建多级目录查看全部
-
InputStream、OutputStream 抽象了应用程序读写数据方式(父类,抽象类) FileInputStream、FileOutputStream (子类) EOF=End 及文件结尾(读到-1)(is.read()=-1) 输入流基本方法 read(); 输入流基本方法 int b=in.read();读取一个字节无符号填充到int的低八位,前面的24位补零。(int是32位,一个字节8位)-1是EOF in.read(byte[] buf);读取数据填充到字节数组buf in.read(byte[] buf,int start,int size),同上,从buf的start位置开始存放size长度的数据 输出流基本方法 out.write(int b) 写出一个byte到流,b的低八位 out.write(byte][] buf) 将buf字节数组都写入到流 out.write(byte[] buf,int start,int size);同上,详见read对应方法 FileInputStream 具体实现了文件上读取数据查看全部
-
utf—8 一个中文算三个字节 gbk 一个中文算两个字节查看全部
-
randomaccessfile 的读取操作是byte[]数据字节的操作?查看全部
-
若要对目录下面所有子目录遍历 ,则递归调用。 注:这里的listDIrectory是函数自身名字,用来递归查看全部
-
file.list()是用于列出file下的目录的一个字符串数组,但无法列出其子目录;而file.listFiles()则返回一个抽象的file对象数组,将所有的file下的目录列出,通过递归判断它是否是目录来达到将所有文件名列出查看全部
-
4.File file = new File("E:\\javaio\\imooc");imooc不是文件是目录(文件夹) "\\"俩个斜杠是转译符的意思 file.mkdir()是创建file的文件夹的意思 5判断是不是一个目录还是一个文件 isDirectory()和isFile()空也是false 6如果不存在if(!file.exists())就创建目录 file.mkdir() 或者创建文件 file.createNewFile() 不然(file存在)就删除 file.dellte() 7.file.mkdirs()创建多级目录 8.syso(file)输出的是file地址查看全部
-
transient查看全部
-
十六进制 0x开头 八进制 0开头 .write(int ) --->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入。 i >>> 1 以上句子无符号右移一位!是以二进制代码进行的!一个字节表示一个数字。即使八个比特位 如 22 二进制是 00010110 用你的式子就变成了:00001011 右移一位不足的补0 又如-22 二进制是:用补码表示,是11101001 右移1位变成了01110100 移出去的位数就被丢弃! 右移运算符>> 使指定值的所有位都右移规定的次数。右边移出去的部分扔掉不要,左边空出来的部分用原来的数字填充(这就是所谓的带符号右移)查看全部
举报
0/150
提交
取消