字符流
Reader
Reader是 IO 库中提供的另一个输入流接口,和InputStream的区别是,InputStream是一个字节流,以byte为单位读取,而Reader是一个字符流,以char为单位读取。
字节流,以byte为单位
字符流,以char为单位
读取字节(-1,0~255):int read()
读取字符(-1,0~65535):int read()
读到字节数组:int read(byte[] b)
读到字符数组:int read(char[] c)
int read()这个方法读取字符流的下一个字符,并返回字符表示的int,范围是0~65535。如果已读到末尾,返回-1。
try (FileReader fileReader = new FileReader("test.txt", StandardCharsets.UTF_8)) {
int temp;
while ((temp = fileReader.read()) != -1) {
System.out.println((char) temp);
}
} catch (IOException e) {
System.out.println("文件读取出错");
}FileReader
try (FileReader fileReader = new FileReader("input.txt", StandardCharsets.UTF_8);) {
char[] buffer = new char[5];
int character;
while ((character = fileReader.read(buffer)) != -1) {
String content = new String(buffer, 0, character);
System.out.print(content);
}
} catch (IOException e) {
e.printStackTrace();
}假设在input.txt中的文本是hello world,那么在第一次首先读取5个字符(即hello),此时buffer中存储的就是hello,第二次读取 worl,第三次读取后,buffer中存储的是dworl。
此时如果想要查看读取的内容时候,应该从character的长度中读取,也就是读取多少,取出多少,如果按照buffer的长度来打印内容时候,就会导致多处来字符。
Writer
Writer是带编码转换器的OutputStream,他把char转换为byte并输出。Writer和OutputStream的区别如下。
字节流,以byte为单位
字符流,以char为单位
写入字节(0~255):void write(int b)
写入字符(0~65535):void write(int c)
写入字节数组:void write(byte[] b)
写入字符数组:void write(char[] c)
无对应方法
写入String:void write(String s)
Writer是所有字符输出流的超类,它提供的方法主要有:
写入一个字符(0~65535):
void write(int c);写入字符数组的所有字符:
void write(char[] c);写入
String表示的所有字符:void write(String s)。
FilteWriter
FileWriter就是向文件中写入字符流的Writer。例如:
try (FileWriter fileWriter = new FileWriter("test.txt")) {
fileWriter.write("h");
fileWriter.write("hello world".toCharArray());
fileWriter.write("hello world");
}CharArrayWriter
CharArrayWriter可以在内存中创建一个Writer,它的作用实际上是构造一个缓冲区,可以写入char,最后得到写入的char[]数组
try (CharArrayWriter charArrayWriter = new CharArrayWriter()) {
charArrayWriter.write(65);
charArrayWriter.write(66);
charArrayWriter.write(67);
char[] data = charArrayWriter.toCharArray(); // { 'A', 'B', 'C' }
}StringWriter
StringWriter是基于内存的Writer,StringWriter在内部维护了一个StringBuffer,并对外提供了Writer接口。
OutputStreamWriter
除了CharArrayWriter和StringWriter,普通的Writer实际上是基于OutputStream构造的,它接受char,然后在内部自动转换成一个或多个byte,并写入OutputStream。因此OutputStreamWriter就是一个将任意的OutputStream转换为Writer的转换器
try (OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("test_01.txt"), StandardCharsets.UTF_8)) {
outputStreamWriter.write("hello");
}最后更新于
这有帮助吗?