简单概括java中文件字节流和字符流的一些注意事项

一、相关对象:

FileInputStream
FileOutputStream
FileReader
FileWriter
简单概括java中文件字节流和字符流的一些注意事项_第1张图片

二、区别:

1、字符输出流FileWriter在写入到文件中时要刷新缓冲流

flush();

直接关闭流前也会先执行一遍上面的刷新。
2、字节流同样也可以向文件中写入汉字,只要知道相应汉字的字节表示。
例如:

 FileOutputStream fos = new FileOutputStream(new File("E:\\ming.txt"));
        //汉字“戈”的gbk编码字节
        byte[] cruf = {-72,-22}; 
        fos.write(cruf);
        fos.close();

3、使用字节数组接受读取的字节为什么会出现负数的情况?
因为字节数组的取值范围是[-127,128],如果用int类型来接受的话,就不会出现负数的情况,而且int接受的值和byte类型接受的负值的相反数相加起来恒等于256。
例如:

FileInputStream fr = new FileInputStream("e:\\ming.txt");
      	// 定义变量,保存有效字符个数
        int len ;
        // 定义字符数组,作为装字符数据的容器
         byte[] cbuf = new byte[2];
        //先用字节数组接受文件中的第一个汉字“严”
        fr.read(cbuf);
        System.out.println(cbuf[0]+" "+cbuf[1]);
        System.out.println(new String(cbuf));
        //再用t和t1接受汉字“严”
        int t = fr.read();
        System.out.println(t);
        int t1 = fr.read();
        System.out.println(t1);
		// 关闭资源
        fr.close();
        结果:
        -47 -49
        严
       209
       207

4、字节流和字符中的读取方法中有直接读取返回int整型,也有用字节数组和字符数组读取返回int整型,这两个整型前者是读取的内容在unicode表中的编号,后者则是读取的有效个数。

5、直接使用字符流读取汉字时返回的int是汉字在unicode编码表中的编号,字符流其底层还是字节流,unicode编码表和各种编码方式的关系可参考。
编码关系

以上就是我在学习文件流遇到的问题,希望对你有帮助!

你可能感兴趣的:(java)