【问题标题】:How to read binary file to binary characters java如何将二进制文件读取为二进制字符java
【发布时间】:2013-09-26 09:35:40
【问题描述】:

我有一个二进制文件,我需要按照它们在二进制文件中的相同顺序读取并保存为字符或 0 和 1 的字符串。我目前能够读取二进制文件,但无法获得 0 和 1。这是我目前使用的代码:

public void read()
{
    try
    {
        byte[] buffer = new byte[(int)infile.length()];
        FileInputStream inputStream = new FileInputStream(infile);

        int total = 0;
        int nRead = 0;
        while((nRead = inputStream.read(buffer)) != -1)
        {
            System.out.println(new String(buffer));
            total += nRead;
        }
        inputStream.close();
        System.out.println(total);
    }
    catch(FileNotFoundException ex)
    {
        System.out.println("File not found.");
    }

    catch(IOException ex)
    {
        System.out.println(ex);
    }
}  

以及使用二进制文件运行它的输出:

 �, �¨Ã �¨Êà   
�!Cˇ¯åaÃ!Dˇ¸åÇÃ�"( ≠EÃ!J�H���û�������  
����������������������������������������������������������������������������������������  
156

感谢您提供的任何帮助。

【问题讨论】:

  • 您需要 1 和 0 是否有特殊原因,或者您只是需要将此文件复制到其他地方?

标签: java string binary char binaryfiles


【解决方案1】:

查看String to binary output in Java。基本上你需要获取你的字符串,将其转换为字节数组,然后将每个字节打印为二进制字符串。

【讨论】:

    【解决方案2】:

    不是将字节直接转换为字符然后打印它们,而是将每个字节转换为二进制字符串并打印出来。也就是说,替换

    System.out.println(new String(buffer));
    

    for (int i = 0; i<nRead; i++) {
        String bin=Integer.toBinaryString(0xFF & buffer[i] | 0x100).substring(1);
        System.out.println(bin);
    }
    

    请注意,每个字节的位都以大端顺序打印。没有办法知道位是否实际按此顺序存储在磁盘上。

    【讨论】:

      【解决方案3】:

      JBBP这样的操作会很轻松

      public static final void main(final String ... args) throws Exception {
          try (InputStream inStream = ClassLoader.getSystemClassLoader().getResourceAsStream("somefile.txt")) {
            class Bits { @Bin(type = BinType.BIT_ARRAY) byte [] bits; }
            for(final byte b : JBBPParser.prepare("bit [_] bits;",JBBPBitOrder.MSB0).parse(inStream).mapTo(Bits.class).bits)
              System.out.print(b != 0 ? "1" : "0");
          }
        }
      

      但它不适用于大文件,因为在运行期间解析的数据将缓存在内存中

      【讨论】:

        【解决方案4】:

        即使此响应是用 C 语言编写的,您也可以使用 JNI 从 Java 程序本地访问它。

        由于它们是二进制格式,您将无法阅读。我会这样做。

        fstream fs;
        int value; //Since you are reading bytes, change accordingly.
        fs.open( fileName, is.in | is.binary );
        
        fs.read((char *) &value, sizeof(int));
        
        while(!fs.eof())
        {
            //Print or do something with value
            fs.read((char *) &value, sizeof(long));
        }           
        

        【讨论】:

        • 不以任何方式回答问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-16
        • 2021-07-26
        • 2011-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-13
        相关资源
        最近更新 更多