Java Reg-从字节流读取的数据
我正在尝试使用字节流读取包含普通文本数据的文件。我知道在字节流中,每个字节都会被一个接一个地读取。因此,如果我读了数据,你好通过字节流在文本文件中输入,然后它应该给我每个字符的Unicode等价物,但它给我一个不同的输出,它不会映射到utf或ascii等价物 下面是我的程序Java Reg-从字节流读取的数据,java,Java,我正在尝试使用字节流读取包含普通文本数据的文件。我知道在字节流中,每个字节都会被一个接一个地读取。因此,如果我读了数据,你好通过字节流在文本文件中输入,然后它应该给我每个字符的Unicode等价物,但它给我一个不同的输出,它不会映射到utf或ascii等价物 下面是我的程序 package files; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class F
package files;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class FileBaiscs {
public static void main(String[] args) throws IOException {
String strPath = "D:\\Files\\New.txt";
File objSrcFile = new File (strPath);
if (objSrcFile.exists()==false)
{
System.out.println("The Source File is not Present");
System.exit(0);
}
FileInputStream objIpStream = new FileInputStream(objSrcFile);
while ((objIpStream.read())!=-1)
{
System.out.println(objIpStream.read());
}
objIpStream.close();
}
}
我的控制台中的输出是:
105
72
119
97
101
121
117
33
33
33
新文本文件中的数据是-Hi你好代码>
我希望输出是整数,它的utf等价于上述每个字符。如果我的理解有误,请告诉我。这里
while ((objIpStream.read())!=-1)
{
System.out.println(objIpStream.read());
}
您正在读取2个字节而不是1个字节。第一个在条件中读取,第二个在循环体中读取。
你应该做的是
byte b;
while ((b=objIpStream.read())!=-1)
{
System.out.println(b);
}
你的误解是因为你认为字节是字符;事实并非如此
为了读取字符,您必须首先将字节转换为字符,这是通过一个称为字符编码的过程来完成的。InputStream
不会执行此操作,但读取器将执行此操作
因此,请尝试:
final Path path = Paths.get("F:\\Files\\New.txt");
try (
final BufferedReader reader = Files.newBufferedReader(path,
StandardCharsets.UTF_8);
) {
int c;
while ((c = reader.read()) != -1)
System.out.println(c);
}
另外,在原始代码中,每个循环读取两个字节