fileinputstream中read方法中使用的字节数据类型

时间:2012-10-12 04:50:18

标签: java fileinputstream

我已经阅读了FileInputStream,我发现它有读取方法,它将读取文件的字节数据。

我想知道的是它读取的字节数据类型是什么?意思是使用ASCII或Unicode还是其他任何类型?

4 个答案:

答案 0 :(得分:2)

来自documentation

  

FileInputStream用于读取原始字节流,例如图像数据。要读取字符流,请考虑使用FileReader。

ASCII,Unicode,...适用于字符,而不是字节。它们只是字节(8位)。

您可以在指定字符集的地方使用public InputStreamReader(InputStream in, Charset cs)

答案 1 :(得分:1)

FileInputStream是二进制I / O类。它的Text I / O需要从Unicode转换为特定于文件的编码,反之亦然,但二进制I / O不需要任何转换。从文件中读取一个字节时,将返回原始字节。

答案 2 :(得分:1)

  

我想知道的是它读取的字节数据类型是什么?意思是它使用ASCII或Unicode还是其他任何类型?

FileInputStream及其方法而言,只有一种“类型”的数据。那个类型是“一个字节序列(或八位字节)”。

任何其他“类型”都是针对另一个库(或应用程序代码)层来处理的。

您称为ASCII和Unicode的“类型”是字符编码(粗略地说)。 (事实上​​,Unicode本身并不是一种编码......在这种情况下并不完全有意义。用于Unicode的编码具有“UTF-8”和“UTF-16”之类的名称等等 - 请参阅{{3 }}。)

无论如何,“处理”文本文件类型(即某些标准字符编码方案中的字符序列)的标准方法是使用Reader类。还有一个名为InputStreamReader的包装类,专门用于从InputStream读取字符数据。

其他非文本“数据类型”的数据由ZipInputStreamInflaterInputStreamGZIPInputStream,图片阅读器类等处理。

答案 3 :(得分:0)

它不会更改文件编码。如果要以所需的编码在byte []中进行解码,可以使用charset转换所需的字符集,如下所示:

   Charset cs = Charset.forName("UTF-8"); // breaks too
   String convertedString= new String(byteArray, cs);