【问题标题】:JAVA - Write binary number to a file and read itJAVA - 将二进制数写入文件并读取它
【发布时间】:2013-03-22 13:20:15
【问题描述】:

如何在没有二进制数的情况下将二进制数写入文件以减少零。

我是这样写的:

byte[] b = new BigInteger("1011010101010110", 2).toByteArray();

FileOutputStream fos = new FileOutputStream("file",true);
fos.write(b);

但是例如:当我写 0000001 时,它只在文件中写入 1 并忽略零,如果我写 001001001000 也会发生同样的情况,它会忽略左侧的零,从右到右读取 8 位离开了。

将二进制数字写入文件的正确方法是什么?如果这是正确的方法,我可能会尝试以错误的方式读取文件(我正在使用 InputStream 的 read() )

Ps-(8位必须是1个字节,所以不能写成字符串,因为每个数字都是1个字节。)

【问题讨论】:

标签: java binary inputstream readfile fileoutputstream


【解决方案1】:

你可以试试这样的

    String s = "0000001";
    byte[] a = new byte[s.length()];
    for (int i = 0; i < s.length(); i++) {
        a[i] = (byte) (s.charAt(i) & 1);
    }

【讨论】:

  • 但是像这样,我需要 7 个字节来写一个文件。“0000001”必须只需要 1 个字节。
  • 但你说'当我写 0000001 时,它只在文件中写入 1 并忽略零'
  • 是的,我知道,但是没有办法将 0000001 保存在 1 个字节中?不丢失零?
  • 当你保存一个字节时,如果有的话,你总是保存所有带有前导 0 的 8 位。您需要一个十六进制查看器才能查看所有位。
【解决方案2】:

你不想把它写成二进制文件,你想把它写成代表二进制文件的字符串。问题是 Java 无法知道您想要填充它。我建议将您的二进制数转换为字符串,然后用 0 向左填充(Apache StringUtils 将对此有所帮助)

【讨论】:

    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多