我已经阅读了FileInputStream
,我发现它有读取方法,它将读取文件的字节数据。
我想知道的是它读取的字节数据类型是什么?意思是使用ASCII或Unicode还是其他任何类型?
答案 0 :(得分:2)
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
读取字符数据。
其他非文本“数据类型”的数据由ZipInputStream
,InflaterInputStream
,GZIPInputStream
,图片阅读器类等处理。
答案 3 :(得分:0)
它不会更改文件编码。如果要以所需的编码在byte []中进行解码,可以使用charset
转换所需的字符集,如下所示:
Charset cs = Charset.forName("UTF-8"); // breaks too
String convertedString= new String(byteArray, cs);