【问题标题】:Get binary value of any file获取任何文件的二进制值
【发布时间】:2013-01-01 22:39:34
【问题描述】:

如果假设我有一个文件,例如 music.mp3image.jpg 或任何要考虑的文件。我如何将这些文件的二进制表示形式转换为 java 中的字符串值,以便我可以查看它??

例如:假设我有一个名为 'video.mp4' 的文件,那么它必须表示为 101011010101000111010 或内存中的类似内容,我需要获取该值并将其存储在像 String s = "101011010101000111010" 这样的字符串中

有没有人知道如何在 java 中做到这一点?

编辑 2 如何将字符串转换回实际文件??

【问题讨论】:

标签: java binary


【解决方案1】:

我建议使用十六进制,它更紧凑且可读性更强

    StringBuilder sb = new StringBuilder();
    try (BufferedInputStream is = new BufferedInputStream(new FileInputStream("1.txt"))) {
        for (int b; (b = is.read()) != -1;) {
            String s = Integer.toHexString(b).toUpperCase();
            if (s.length() == 1) {
                sb.append('0');
            }
            sb.append(s).append(' ');
        }
    }
    System.out.println(sb);

输出

71 77 65 77 65 72 0D 0A 71 77 72 65 0D 0A 72 77 65 72 0D 0A 

对于二进制字符串更改代码

            String s = "0000000" + Integer.toBinaryString(b);
            s = s.substring(s.length() - 8); 
            sb.append(s).append(' ');

得到这个输出

01110001 01110111 01100101 01110111 01100101 01110010 00001101 00001010 

这是解析字符串并写回文件的方法

    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("2.txt"));
    Scanner sc = new Scanner(s);
    while (sc.hasNextInt()) {
        int b = sc.nextInt(2);
        out.write(b);
    }
    out.close();

【讨论】:

  • 这不是格里什问题的答案。他要求二进制输出,为什么要写十六进制版本?我也认为它更具可读性,但stackoverflow的整个概念(我认为)是尽可能准确地回答问题。
  • @Evgeniy Dorofeev:如何将字符串转换回实际文件??
  • @Evgeniy Dorofeev:我使用FileWriter 使用Scanner sc = new Scanner(sb.toString()); 创建文件,但我得到一个0kb 的文件?你能解释一下怎么写吗??
  • 查看我的更新。它解析“01110001 01110111 ...”并将其逐字节写入2.txt
  • @EvgeniyDorofeev 如何将十六进制值写回文件?上面你展示了如果我们将二进制值放入一个新文件时如何做,但是我们如何用十六进制做呢?
猜你喜欢
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
相关资源
最近更新 更多