问:字节流读取中文输出可能会存在什么问题?
- 会乱码。或者内存溢出。
读取中文输出,哪个流更合适,为什么?
- 字符流更合适,最小单位是按照单个字符读取的。

代码演示如下:
public class FileReaderDemo01 {
public static void main(String[] args) throws Exception {
//目标:每次读取一个字符
//1.创建一个字符输入流管道与源文件接通
Reader fr = new FileReader("/Users/birdbird/Documents/Java code/Java ProMax/file-io-app/src/out04.txt");
//2.读取一个字符返回,没有可读的字符了返回-1
// int code = fr.read();
// System.out.println((char) code);
// int code1 = fr.read();
// System.out.println((char) code1);
//3.使用循环读取字符
int code;
while ((code = fr.read()) != -1){
System.out.print((char) code);
}
}
}
问:字符流的好处?每次读取一个字符存在什么问题?
- 读取中文字符不会出现乱码 (如果代码和文件编码一致)
- 性能较慢
public class FileReaderDemo02 {
public static void main(String[] args) throws Exception{
//1.创建一个文件字符输入流与源文件接通
Reader fr = new FileReader("/Users/birdbird/Documents/Java code/Java ProMax/file-io-app/src/out04.txt");
//2.用循环,每次读取一个字符数组的数据。
char[] buffer = new char[1024]; // 1K字符
int len;
while ((len = fr.read(buffer)) != -1){
String rs = new String(buffer,0,len);
System.out.println(rs);
}
}
}
问:每次读取一个字符数组的优势?
- 读取的性能得到了提升

代码演示如下:
public class FileWriterDemo03 {
public static void main(String[] args) throws Exception{
//1.创建一个字符输出流管道与目标文件接通
Writer fw = new FileWriter("/Users/birdbird/Documents/Java code/Java ProMax/file-io-app/src/out04.txt");
//a.publi void write(int c):写一个字符出去
fw.write(98);
fw.write('a');
fw.write('鸟');
//b.publi void write(String c)写一个字符串出去
fw.write("abc我爱中国");
//c.public void write(char[] buffer):写一个字符串出去
char[] chars = "abc我是中国人".toCharArray();
fw.write(chars);
//d.public void write(String c , int pos , int len):写字符串的一部分出去
fw.write("abc我是中国人",0,2);
//e.public void write(char[] buffer , int pos, int len):写字符数组的一部分出去
fw.write(chars,3,5);
//fw.flush(); // 刷新后流可以继续使用
fw.close(); // 关闭了包含刷新,关闭后流不能使用
}
}
问:字节流、字符流如何选择使用?
- 字节流适合做一切文件数据的拷贝(音视频,文本)
- 字节流不适合读取中文内容输出
- 字符流适合做文本文件的操作(读,写)
![[C++]vs2019运行c++报错:错误 C1075 “{”: 未找到匹配令牌](https://img-blog.csdnimg.cn/10b4c57797174d7ab66f81dcf23e420c.jpeg)









![[进阶]Java:对象序列化、反序列化](https://img-blog.csdnimg.cn/6b812d83c89148f88fb0ef387a9d74d8.png)








