java IO之字节流和字符流比较

本文详细介绍了比特、字节及字符的概念,并对比了字节流与字符流的主要区别,探讨了它们在处理不同文件类型时的应用场景,以及如何在二者之间进行转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 比特、字节和字符的定义

     这个很基础,但是在开头说一下还是有必要的

     比特:bit(binarydigit),信息的基本单元。只有两种取值:0或者1.

     字节:通常由8比特组成。由于通常用来编辑计算机上文本的单个字符,所以字节是很多的计算机架构中的内存的最小可寻址单元

     字符:信息单元;大概相当于1个字母或者符号等。比如数字,字母,标点符号等。英文字符一般由1个字节组成。汉字一般由两个字节组成

 

2、 字节流和字符流的区别?

所谓流就是连续访问文件的一种方式。字节流就是一个字节一个字节访问文件。字节流适合除了文本文件外的任何类型的文件。例如,如果文件使用了unicode编码,每个字符使用的是两个字节表示,那么字节流就会将这两个字节流单独对待,导致的结果是你必须在后续自己去转换(成原来的字符)

类似地,字符流就是一个字符一个字符的读取文件。为了工作正常,字符流需要提供文件的编码。

3、 字节流和字符流分别对应的类

     所有字节流类都是InputStream或OutputStream的子类。最主要的两个是FileInputStream和FileOutputStream。    

    什么时候不适用字节流?

       字节流代表的是一种低级别的I/O,所以应该尽量避免使用。尤其是文本文件,包含的是字符,最好的方式是使用字符流。字节流只考虑用在最原始的I/O上。但是字节流是所有其他流的基础。 

字符流:

   Java平台使用Unicode协议保存字符值。字符流I/O自动在这些内部格式和本地字符集间进行转换。

  所有的字符流类都是Reader和Writer的子类。

字符流经常会“封装”字节流。字符流使用字节流来操作物理I/O,然后字符流执行字节和字符间的转换。比如,FileReader使用FileInputStream、FileWriter使用FileOutputStream。

4、 字节流和字符流之间的转换

使用InputStreamReader可以将字节流转换成字符流;

使用OutputStreamWriter类可以将字符流转换成字节流。

当你创建InputStreamReader和OutputStreamWriter对象,你可以指定你想要转换的编码。比如为了将一个编码为UTF8的文件转换成Unicode,创建InputStreamReader如下:

           FileInputStream fis = new FileInputStream("test.txt");

InputStreamReader isr = newInputStreamReader(fis, "UTF8");

    如果忽略,就会使用默认的编码。可以通过如下获取使用的编码:

               InputStreamReader defaultReader = new InputStreamReader(fis);

                                                       String defaultEncoding =defaultReader.getEncoding();

 

 


 

参考文献:

  https://docs.oracle.com/javase/tutorial/i18n/text/stream.html

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值