Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Reg-从字节流读取的数据_Java - Fatal编程技术网

Java Reg-从字节流读取的数据

Java Reg-从字节流读取的数据,java,Java,我正在尝试使用字节流读取包含普通文本数据的文件。我知道在字节流中,每个字节都会被一个接一个地读取。因此,如果我读了数据,你好通过字节流在文本文件中输入,然后它应该给我每个字符的Unicode等价物,但它给我一个不同的输出,它不会映射到utf或ascii等价物 下面是我的程序 package files; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class F

我正在尝试使用字节流读取包含普通文本数据的文件。我知道在字节流中,每个字节都会被一个接一个地读取。因此,如果我读了数据,你好通过字节流在文本文件中输入,然后它应该给我每个字符的Unicode等价物,但它给我一个不同的输出,它不会映射到utf或ascii等价物

下面是我的程序

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);
}
另外,在原始代码中,每个循环读取两个字节