Java基础面试题-7day

本文概述了Java中字符流(如Reader和Writer)的基础知识,解释了在处理包含字符的文件时使用字符流的原因,以及如何通过InputStreamReader和FileReader进行字节到字符的转换,防止乱码问题。同时介绍了字符输出流writer及其常见操作,包括FileWriter的使用实例。
摘要由CSDN通过智能技术生成

I/O流基础知识总结 2

字符流

reader 字符输入流
writer 字符输出流

使用字符流的原因:但我们要读取的文件,字符串含有字符时,如果在不知道该字符对应生成的编码类型是什么就会读取到内存显示的是乱码
所有为了解决,出现了直接操作字符的输入输出流来进行数据的处理

使用范围:
当我们要传输的是视频文件,音频文件时,使用字节输入输出流进行操作
当我们传输的文件是字符,使用字符输入输出流进行操作

常用的字符编码所占的字节数:

  1. unicode 任何字符都占两个字节
  2. gbk 英文占一个字节,中文占两个字节
  3. utf-8 英文占一个字节,中文占三个字节

reader-字符输入流

读取的是文本内容,不是字节内容

常用方法有:

  1. read()
  2. read(char[] cbuf)
  3. read(char[] cbuf,int off ,int length)
  4. skip(long n)
  5. close()

inputStreamReader
是字节流转换成字符流的桥梁
原理:

  1. 读取文件内容,即使是字符,也是以字节的形式进行的、
  2. 我们的目的是要将文件中的内容读取到内存中,当我们遇到字符内容时,会被计算机解析成字节,我们通过InputStreamReader指定要读取的字节输入流对象FileInputStream(文件的路径),字符集(UTF8,GBK,UNICODE)读取,保证和源文件的字符集一致
  3. 由于字节输入流是一个字节一个字节进行的读取,而我们的字符是再一些字符集中是以几个字节组成一个字符的,如果对一个字符所对应的字节进行缓冲,存储再字节缓冲区中,再进行统一的解码,就不会出现乱码
  4. 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-字符输出流

从内存将数据写入到外部存储器中
常见方法:

  1. writer(int n) 读取当个字符
  2. writer(char[] cbuf) 写入字符数组
  3. writer(char[] cbuf, int off ,int len) 写入字符数组,有偏移量和最大字符长度的限制
  4. writer(String str) 写入字符串
  5. writer(String str ,int off ,int length)
  6. append(字符序列 ) 将字符序列追加到writer对象后
  7. append(char c ) 将指定的字符追加到writer对象后
  8. flush() 刷新输出流,并将所有的缓冲的输出字符强制写出
  9. 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/

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云来喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值