我正在修改课程FileInputStream
,我看到一些阅读文件的例子让我想知道这些例子中的演员是如何实际工作的。这是其中一个例子:
public String read()
{
String content = "";
try
{
input = new FileInputStream(file);
int chr = 1;
// reads a byte and returns it as a integer.
// Returns -1, if there's no more bytes to read.
while ((chr = input.read()) != -1)
content += (char) chr;//CAST
input.close();
}
catch(IOException e)
{
e.printStackTrace();
}
return content;
}
我的问题是:
为什么read会返回一个整数而不是一个字节?有什么好处?
演员如何从整数到char?
答案 0 :(得分:1)
有关阅读文件的两点注意事项,来自JavaDoc for FileInputStream.read()
-
<强>返回:强> 数据的下一个字节,如果到达文件末尾则为-1。
-1
将是有效的byte
值。但是,通过使用int
,他们可以将其保留为特殊eof
值。该值恰好是-1
,但这就是他们返回int
的原因。 char
的映射到UTF-16代码单元.JavaDoc到java.lang.Character
部分说明
int
值表示所有Unicode代码点,包括补充代码点。 int的较低(最低有效)21位用于表示Unicode代码点,而较高(最高有效)11位必须为零。除非另有说明,否则关于补充字符和代理字符值的行为如下:
并且utf-8
适合该值范围,前24位为0,后8位为byte
为int
0 - 255.因此,强制转换转换流使用ISO-8859-1编码将byte
(s)转换为String
,并且因为它与前256个(0-255包含)Unicode代码点重叠,它将成为人类可读的文本。