Java FileInputStream.read() 打印时显示不需要的字符
Posted
技术标签:
【中文标题】Java FileInputStream.read() 打印时显示不需要的字符【英文标题】:Java FileInputStream.read() when printed shows undesired characters 【发布时间】:2021-12-04 09:57:57 【问题描述】:我正在关注的教程显示了以下代码
System.out.println("File contents: ");
int character;
while((character=fileinputstream.read())!=-1)
System.out.print((char)character);
fileinputstream.close();
我尝试了以下方式
System.out.println("File contents: ");
while((fileinputstream.read())!=-1)
System.out.print((char)fileinputstream.read());
fileinputstream.close();
现在,我知道这里有些字节会被跳过。但未跳过的字节预计将按原样打印。但是随机字符的输出有很大的不同。
我想了解这里的问题。感谢您提供的任何帮助!
【问题讨论】:
'bytes' 和 'characters' 是不同的东西。例如,一个字符可能不止一个字节。 (并且将一个字节放入名为“字符”的变量中不会使其成为字符)。因此,通过跳过每隔一个字节,您可能会跳过字符的一部分,而您不跳过的部分在被视为同一字符的字节时可能没有意义。究竟发生了什么取决于文件中的内容/ @user16632363 我们可以说ASCII码是部分读取的,因此形成了不同的ASCII码,而这些ASCII码又对应于其他字符? 我们不应该提及ASCII,因为这是Java,它不使用那个过时的标准。 Java 字符是 Unicode 字符。字节序列通常是 Unicode 字符的 UTF-8 表示。 UTF-8 有多字节字符; ASCII,一个 7 位代码,没有。 但是是的,字符代码被部分读取,因此它们的组成字节被错误地重新组合成其他字符。 @user16632363 感谢您的帮助!我对 UTF-8 表示不太了解。 【参考方案1】:当您调用fileinputstream.read
时,它会读取光标所指向的字节并将光标移动到下一个字节。因为read
方法在while 循环条件被执行并且一个字节读出消失时被调用。本教程使用一个变量来保存该字节的值以防止它消失。
所以请按照教程进行操作
【讨论】:
他知道那部分:我知道这里有些字节会被跳过。以上是关于Java FileInputStream.read() 打印时显示不需要的字符的主要内容,如果未能解决你的问题,请参考以下文章