字符流
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");
}
最后更新于
这有帮助吗?