【问题标题】:java array byte file to human readablejava数组字节文件到人类可读
【发布时间】:2020-03-09 19:22:32
【问题描述】:

我有一个字节数组文件,我正在尝试将其转换为人类可读的文件。我尝试了以下方法:

public static void main(String args[]) throws IOException
        {
            //System.out.println("Platform Encoding : " + System.getProperty("file.encoding")); 
            FileInputStream fis = new FileInputStream("<Path>"); 
            // Using Apache Commons IOUtils to read file into byte array 
            byte[] filedata = IOUtils.toByteArray(fis); 
            String str = new String(filedata, "UTF-8"); 
            System.out.println(str); 
            }

另一种方法:

public static void main(String[] args) {
        File file = new File("<Path>");
        readContentIntoByteArray(file);
    }
    private static byte[] readContentIntoByteArray(File file) {
        FileInputStream fileInputStream = null;
        byte[] bFile = new byte[(int) file.length()];
        try {
            FileInputStream(file);
            fileInputStream.read(bFile);
            fileInputStream.close();
            for (int i = 0; i < bFile.length; i++) {
                System.out.print((char) bFile[i]);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bFile;
    }

这些代码正在编译,但没有以人类可读的方式生成输出文件。如果这是一个重复的或基本的问题,请原谅。

有人可以纠正我这里哪里出错了吗?

【问题讨论】:

  • "但它没有以人类可读的方式产生输出文件" - 你认为什么是人类可读的方式?你能提供一个示例输入和输出吗?而且,如果这对您来说是一个选择,我强烈建议您尝试 FileChannel 而不是原始的 FileInputStream - 它们可以神奇地处理字节、缓冲区和编码。
  • 感谢您的回复。我的意思是说输出文件中的数据不应该是二进制文件或任何加密方式——我称之为人类可读的。对不起。我无法在此处附加我的数组字节文件。
  • 您向我们展示的上述代码的人类可读版本应该是什么?请最后一次向我们展示示例二进制文件内容和预期输出。
  • 有些可疑。如果我们能看到生成输入文件的代码可能会有所帮助。
  • 文件是文本文件还是二进制文件?如果是前者,请将FileInputStream 包装在Reader 中,指定适当的编码,并将数据作为字符读取。如果是后者,那么实际上就没有人类可读的形式,除了可能是十六进制值。

标签: java


【解决方案1】:

您用于将字节文件解码为 UTF-8 文本文件的代码(来自第一个 sn-p)在我看来是正确的(假设 FileInputStream fis = new FileInputStream("Path") 产生了正确的 fileInputStream)。

如果您期待文本文件格式,但不确定文件格式采用哪种编码(可能不是 UTF-8),您可以使用如下库来查找。

https://code.google.com/archive/p/juniversalchardet/

或者只是探索 Charset 库中的一些不同的字符集,看看它们在你的字符串初始化行中产生了什么以及你产生了什么:

new String(byteArray, Charset.defaultCharset()) // try other Charsets here.

您展示的第二种方法将捕获与字节到字符转换相关联,具体取决于字符,如此处所述 (Byte and char conversion in Java)。 很有可能,如果您找不到此文件的有效编码,则在字节转换之前,它一开始就不是人类可读的,或者传递给您的字节数组文件丢失了一些使其在此过程中可解码的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-09
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2023-03-08
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多