无法正确转换二进制文件

时间:2018-06-01 08:33:00

标签: java

我必须阅读一个名为test.p2b的文件,其中包含以下内容: enter image description here

我试着这样读:

static void branjeIzDatoteke(String location){
    byte[] allBytes = new byte[10000];
    try {
        InputStream input = new FileInputStream(location);
        int byteRead;
        int j=0;
        while ((byteRead = input.read())!=-1){
            allBytes[j] = (byte)input.read();
        }
        String str = new String(allBytes,"UTF-8");

        for (int i=0;i<=str.length()-8;i+=8){
            //int charCode = Integer.parseInt(str.substring(i,i+8),2);
            //System.out.println((char)charCode);

            int drek = (int)str.charAt(i);
            System.out.println(Integer.toBinaryString(drek));
        }
    } catch (IOException ex) {
        Logger.getLogger(Slika.class.getName()).log(Level.SEVERE, null, ex);
    }

}

我尝试打印出字符串(当我创建String str = new String(allBytes,“UTF-8”);)时,我得到的只是一个正方形的开头,然后70多个空白行没有文字。 然后我尝试了int charCode = Integer.parseInt(str.substring(i,i + 8),2);并打印出每个单独的字符,但后来我得到了一个N​​umberFormatException。 我甚至试过转换 最后我尝试了最后的Integer.toBinaryString,但在这种情况下,我获得了1和0。这不是我想要的,我需要阅读实际的文本,但似乎没有方法可行。 在使用我已经尝试过的方法之前,我实际上已经阅读了二进制文件: int charCode = Integer.parseInt(str.substring(i,i + 8),2); 的System.out.println((char)的则charCode); 但就像我说的,我得到一个NumberFormatException。 我不明白为什么这些方法不起作用。

1 个答案:

答案 0 :(得分:1)

如果要读取所有字节,可以使用java.nio.file.Files实用程序类:

Path path = Paths.get("test.p2b");
byte[] allBytes = Files.readAllBytes(path);
String str = new String(allBytes, "UTF-8");
System.out.print(str);

您对str内容的迭代可能不起作用。某些UTF字符表示为代理对,代码点可以跨越多个char(如here所述)。由于您使用的是UTF,因此您应该使用String#codePoinst()方法迭代代码点而不是字符。