武夷山住房和城乡建设局网站,wordpress 下载栏目,网站营销话术,公司网站企业文化怎么做I/O流基础知识总结 2
字符流
reader 字符输入流 writer 字符输出流
使用字符流的原因#xff1a;但我们要读取的文件#xff0c;字符串含有字符时#xff0c;如果在不知道该字符对应生成的编码类型是什么就会读取到内存显示的是乱码 所有为了解决#xff0c;出现了直接操…I/O流基础知识总结 2
字符流
reader 字符输入流 writer 字符输出流
使用字符流的原因但我们要读取的文件字符串含有字符时如果在不知道该字符对应生成的编码类型是什么就会读取到内存显示的是乱码 所有为了解决出现了直接操作字符的输入输出流来进行数据的处理 使用范围 当我们要传输的是视频文件音频文件时使用字节输入输出流进行操作 当我们传输的文件是字符使用字符输入输出流进行操作 常用的字符编码所占的字节数
unicode 任何字符都占两个字节gbk 英文占一个字节中文占两个字节utf-8 英文占一个字节中文占三个字节
reader-字符输入流
读取的是文本内容不是字节内容
常用方法有
read()read(char[] cbuf)read(char[] cbuf,int off ,int length)skip(long n)close()
inputStreamReader 是字节流转换成字符流的桥梁 原理
读取文件内容即使是字符也是以字节的形式进行的、我们的目的是要将文件中的内容读取到内存中当我们遇到字符内容时会被计算机解析成字节我们通过InputStreamReader指定要读取的字节输入流对象FileInputStream(文件的路径)字符集UTF8,GBK,UNICODE读取保证和源文件的字符集一致由于字节输入流是一个字节一个字节进行的读取而我们的字符是再一些字符集中是以几个字节组成一个字符的如果对一个字符所对应的字节进行缓冲存储再字节缓冲区中再进行统一的解码就不会出现乱码InputStreamReader就有缓冲的功能缓冲之后通过字符集解码为字符返回
FileReader 文件字符输入流 是以字符进行的读取 FileReader.read() 读取返回的是下一个字符的字节数
try (FileReader fileReader new FileReader(input.txt);) {int content;long skip fileReader.skip(3);System.out.println(The actual number of bytes skipped: skip);System.out.print(The content read from file:);while ((content fileReader.read()) ! -1) {System.out.print((char) content);}
} catch (IOException e) {e.printStackTrace();
}结果
The actual number of bytes skipped:3
The content read from file:我是Guide。
writer-字符输出流
从内存将数据写入到外部存储器中 常见方法
writer(int n) 读取当个字符writer(char[] cbuf) 写入字符数组writer(char[] cbuf, int off ,int len) 写入字符数组有偏移量和最大字符长度的限制writer(String str) 写入字符串writer(String str ,int off ,int length)append(字符序列 ) 将字符序列追加到writer对象后append(char c ) 将指定的字符追加到writer对象后flush 刷新输出流并将所有的缓冲的输出字符强制写出close() 关闭输出流释放资源
OutputStreamWriter 与InputStreamReader相反是将字符流转换为字节流的桥梁
FileWriter
将文件放到文件字符输出流中
try (Writer output new FileWriter(output.txt)) {// 写入字符通过字符流的write方法将字符写入文件output.txt中output.write(你好我是Guide。);
} catch (IOException e) {e.printStackTrace();
} 个人总结 具体来自https://javaguide.cn/