COMPLEX-B

导航

读取文件注意事项

为什么使用.read()读取文件然后写入中文时不会乱码

FileInputStream 和 BufferedInputStream 读取文件时的区别

相同点

  • .read(),每次读取1byte
	int temp;
	while ((temp = r.read()) != -1) {// 每次读取1byte
	    System.out.println(temp);
	    w.write(temp);// 写入文件
	    //System.out.println("写入成功");
        }
  • 定义byte数组
        byte[] bytes = new byte[20];// 定义每次读取20字节数量
	while (r.read(bytes) != -1) {// 判断是否读完
	    w.write(bytes);// 每次读取到bytes中,然后从bytes中取出写入文件20byte
        }

使用数组读写时,最好使用write(byte[] array, int offset, int len),如果直接使用write(byte[])可能会写入错误的数据

		byte[] b = new byte[2];
		int len = 0;
		while ((len = r.read(b)) != -1)
			//w.write(b);// 原文件有三个字母abc,写入新文件后是abcb,以为第一次读到ab后,第二次在读时,b会残留在数组的第二个元素中,如果把数组全部写入,就会重复写入上次读入的数据
                        write(b, 0, len);// 每次读几个数据就写几个数据就不会产生上面的错误

不同点

  • 声明方法
    BufferedInputStream r = new BufferedInputStream(new FileInputStream("src/file/file02.txt")
    FileInputStream r =new FileInputStream("src/file/file02.txt")

  • 读取方法
    FileInputStream每次都从硬盘读取数据
    BufferedInputStream有一个缓冲区,每次从缓冲区读取数据,缓冲区的大小默认为8192字节,在文件小于这个大小的时候Buffer的的读取速度要远大于File直接读取

每个定义的输入流只能用一次,使用第二次时就read()不到内容

操作字节流时,使用BufferedInputStream不如使用FileInputStream + 一个 8k的byte数组读写的速度快

字符流的读写速度没有字节流快

无论字符流还是字节流都可以使用byte数组或char数组加快读写速度

posted on 2019-04-16 20:38  COMPLEX-B  阅读(274)  评论(0编辑  收藏  举报