1

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

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

4

4 回答 4

2

文档

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

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

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

于 2012-10-12T05:02:50.973 回答
1

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

于 2012-10-12T05:05:08.013 回答
1

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

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

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

您称为 ASCII 和 Unicode 的“类型”是字符编码(粗略地说)。(事实上​​,Unicode 根本不是一种编码......并且在这种情况下并不完全有意义。Unicode 的编码有“UTF-8”和“UTF-16”等名称 - 见http:/ /en.wikipedia.org/wiki/Comparison_of_Unicode_encodings。)

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

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

于 2012-10-12T06:13:04.603 回答
0

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

   Charset cs = Charset.forName("UTF-8"); // breaks too
   String convertedString= new String(byteArray, cs);       
于 2012-10-12T04:58:31.413 回答