关于JAVA IO 中字节流和字符流的问题

时间:2022-12-27 20:57:56
   是否可以这样理解:

   纯文本文件,比如纯汉字。不用 Reader 而用 inputstream 也能正确读出,是否因为字节流每次都读 1 个字节,只是效率和方便性上相比 字符流 有不足 ? 

   字节流是不带编码信息的,需要知道原始的字节的字符集,才能转码过来,而reader不用转,2边字符集一致的话,直接就出来了。而图片之类是图片编码,不是字符编码,所以只能用字节流处理 ?

   字节流通吃,而字符流是处理具有某种编码格式的字符 ?

大家有什么看法和纠错,请指点下

6 个解决方案

#1


  也就是说字节流可用于任何类型的对象,而字符流只能处理字符或者字符串,Unicode字符;
也就是说 字节流可以读写所有的文件,而字符流只能读写文本文件。但是能用字符流的时候就不要用字节流,因为字符流的读写效率更高一些。

#2


字节流 读中文 乱码

#3


如果用ajax技术的话,他的编码是utf-8如果服务器是gbk也会出现乱码现象 ?

#4


  纯文本文件,比如纯汉字。不用 Reader 而用 inputstream 也能正确读出,是否因为字节流每次都读 1 个字节,只是效率和方便性上相比 字符流 有不足 ? 
答:“字节流每次都读 1 个字节”听起来挺别扭的,应该是“以字节为单位进行读写”,性能上当然是字节流效率更高,文件在硬盘上都是二进制,任何机器都是一样:八位构成一个字节,所以字节流读取时很方面。而用字符流读写时,需要有个字符和字节的转化过程,多了这个过程所以效率就下降了。

  字节流是不带编码信息的,需要知道原始的字节的字符集,才能转码过来,而reader不用转,2边字符集一致的话,直接就出来了。而图片之类是图片编码,不是字符编码,所以只能用字节流处理 ?
答:啥叫编码方式?就是对字节指定的一系列规则。字节本身怎么会有编码呢? reader是在读取时就已经知道编码方式了,这才能读取,不然不知道编码方式,你叫它在底层如何读取字符呢?鬼知道几个字节以什么样的方式构成的一个字符,况且各种字符集规则各不相同。

  字节流通吃,而字符流是处理具有某种编码格式的字符 ?
答:对。

总体来说,lz的理解还是基本正确的。

#5


  但貌似我们在操作纯文本文件的时候都喜欢用字符流,方便
引用 4 楼 hepeng19861212 的回复:
纯文本文件,比如纯汉字。不用 Reader 而用 inputstream 也能正确读出,是否因为字节流每次都读 1 个字节,只是效率和方便性上相比 字符流 有不足 ? 
答:“字节流每次都读 1 个字节”听起来挺别扭的,应该是“以字节为单位进行读写”,性能上当然是字节流效率更高,文件在硬盘上都是二进制,任何机器都是一样:八位构成一个字节,所以字节流读取时很方面。而用字符流读写时,需要有个字符和字……

#6


UTF-8编码格式下,中文占三个字节,GBK编码格式下,中文占两个字节。在UTF-8格式下,如果你用字节流没有读到三字节的整数倍的话,会出现乱码,在GBK格式下,如果你用字节流没有读到两字节的整数倍的话,会出现乱码

#1


  也就是说字节流可用于任何类型的对象,而字符流只能处理字符或者字符串,Unicode字符;
也就是说 字节流可以读写所有的文件,而字符流只能读写文本文件。但是能用字符流的时候就不要用字节流,因为字符流的读写效率更高一些。

#2


字节流 读中文 乱码

#3


如果用ajax技术的话,他的编码是utf-8如果服务器是gbk也会出现乱码现象 ?

#4


  纯文本文件,比如纯汉字。不用 Reader 而用 inputstream 也能正确读出,是否因为字节流每次都读 1 个字节,只是效率和方便性上相比 字符流 有不足 ? 
答:“字节流每次都读 1 个字节”听起来挺别扭的,应该是“以字节为单位进行读写”,性能上当然是字节流效率更高,文件在硬盘上都是二进制,任何机器都是一样:八位构成一个字节,所以字节流读取时很方面。而用字符流读写时,需要有个字符和字节的转化过程,多了这个过程所以效率就下降了。

  字节流是不带编码信息的,需要知道原始的字节的字符集,才能转码过来,而reader不用转,2边字符集一致的话,直接就出来了。而图片之类是图片编码,不是字符编码,所以只能用字节流处理 ?
答:啥叫编码方式?就是对字节指定的一系列规则。字节本身怎么会有编码呢? reader是在读取时就已经知道编码方式了,这才能读取,不然不知道编码方式,你叫它在底层如何读取字符呢?鬼知道几个字节以什么样的方式构成的一个字符,况且各种字符集规则各不相同。

  字节流通吃,而字符流是处理具有某种编码格式的字符 ?
答:对。

总体来说,lz的理解还是基本正确的。

#5


  但貌似我们在操作纯文本文件的时候都喜欢用字符流,方便
引用 4 楼 hepeng19861212 的回复:
纯文本文件,比如纯汉字。不用 Reader 而用 inputstream 也能正确读出,是否因为字节流每次都读 1 个字节,只是效率和方便性上相比 字符流 有不足 ? 
答:“字节流每次都读 1 个字节”听起来挺别扭的,应该是“以字节为单位进行读写”,性能上当然是字节流效率更高,文件在硬盘上都是二进制,任何机器都是一样:八位构成一个字节,所以字节流读取时很方面。而用字符流读写时,需要有个字符和字……

#6


UTF-8编码格式下,中文占三个字节,GBK编码格式下,中文占两个字节。在UTF-8格式下,如果你用字节流没有读到三字节的整数倍的话,会出现乱码,在GBK格式下,如果你用字节流没有读到两字节的整数倍的话,会出现乱码