获取任何文件的二进制值

3
如果我有一个名为 music.mp3 image.jpg 的文件,或者其他任何要考虑的文件。在Java中,我如何将这些文件的二进制表示转换为字符串值,以便我可以查看它??
例如:假设我有一个名为“ video.mp4”的文件,则必须以类似于 101011010101000111010 之类的内存中的值表示,并且我需要获取该值并将其存储在String中,如 String s =“101011010101000111010” 有人知道如何在Java中实现吗?
编辑2:如何将字符串转换回实际的文件?

4
首先,将文件读入数组中。可以参考这个链接:https://dev59.com/xmw05IYBdhLWcg3wahNN然后,逐个以二进制形式显示字节。可以参考这个链接:https://dev59.com/5W435IYBdhLWcg3wtSUV - Dariusz
你真的想要它以二进制形式吗?不是十六进制形式? - Jim Garrison
请阅读这里...这是相同的问题..https://dev59.com/V1rUa4cB1Zd3GeqPjm3Y - Elior
1个回答

5
我建议使用十六进制,它更加紧凑易读。
    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();

1
这不是Grish问题的答案。他要求二进制输出,为什么要写十六进制版本?我也认为十六进制更易读,但整个stackoverflow的概念(我认为)是尽可能精确地回答问题。 - Dariusz
@Evgeniy Dorofeev:我该如何将字符串转换回实际文件? - Girish Nair
@Evgeniy Dorofeev:我使用FileWriter来创建文件,使用Scanner sc = new Scanner(sb.toString());但是我得到了一个0kb的文件?你能解释一下如何写入吗? - Girish Nair
请看我的更新。它解析“01110001 01110111 ...”,并将其逐字节写入2.txt文件。 - Evgeniy Dorofeev
1
@EvgeniyDorofeev 我该如何将十六进制值写回文件?你之前展示了如何将二进制值写入新文件,但是我们如何使用十六进制呢? - frosty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接