2

我创建了一个文件的字节数组。

    FileInputStream fileInputStream=null;
File file = new File("/home/user/Desktop/myfile.pdf");
    byte[] bFile = new byte[(int) file.length()];
    try {
        fileInputStream = new FileInputStream(file);
    fileInputStream.read(bFile);
    fileInputStream.close();
    }catch(Exception e){
        e.printStackTrace();
    }

现在,我有一个 API,它需要一个 json 输入,我必须将上面的字节数组以字符串格式。在以字符串格式读取字节数组后,我需要再次将其转换回字节数组。所以,帮我找;

1)如何将字节数组转换为字符串,然后再转换回相同的字节数组?

4

4 回答 4

4

一旦您知道用于将给定文本“序列化”为字节流或对等组件需要的实际字符集(编码),byte[] <-> 字符串转换的一般问题就很容易解决接受给定的字节流作为文本输入 - 请参阅已经给出的完全有效的答案。即使对于经验丰富的软件开发人员,由于缺乏对企业 Java 项目中的字符集(和一般的文本编码)的理解,我已经看到了很多问题,所以我真的建议深入研究这个非常有趣的话题。如果字符编码信息以某种方式表示文本,那么将字符编码信息作为某种“元”信息与您的二进制数据一起保存通常是关键。因此,例如 XML 文件中的标头,甚至后缀作为文件名的一部分,因为它有时会在 Apache htdocs 内容等中看到,更不用说文件系统特定的方法来向文件添加任何类型的元数据。此外,当通过例如 http 进行通信时,Content-Type 标头字段通常包含额外的字符集信息,以允许正确解释实际内容。

但是,由于在您的示例中您阅读的是 PDF 文件,因此我不确定您是否真的可以期待纯文本数据,无论任何字符编码如何。

因此,在这种情况下 - 根据您正在处理的应用程序的其余部分 - 您可能希望在 JSON 字符串中传输二进制数据。这样做的一种常见方法是将二进制数据转换为 Base64,并在传输后从接收到的 Base64 字符串中恢复二进制数据。 如何在 Java 中将字节数组转换为 Base64? 是完成此类任务的良好起点。

于 2013-09-20T09:03:41.630 回答
1

String 类为此提供了一个重载的构造函数

String s = new String(byteArray, "UTF-8");

byteArray = s.getBytes("UTF-8");

鼓励提供显式编码字符集,因为不同的编码方案可能具有不同的字节表示。在此处此处阅读更多信息。

此外,您的输入流可能不会一口气读取所有内容。您必须循环阅读,直到没有更多内容可供阅读。阅读文档read()返回读取的字节数。

从此输入流中读取最多b.length 个字节的数据到字节数组中。此方法阻塞,直到某些输入可用

于 2013-09-20T07:53:01.613 回答
0

将字节数组转换为字符串

 String s = new String(bFile , "ISO-8859-1" );

将字符串转换为字节数组

 byte bArray[] =s.getBytes("ISO-8859-1");   
于 2013-09-20T07:52:17.960 回答
0

String.getBytes()String(byte[] bytes)是要考虑的方法。

于 2013-09-20T07:52:41.633 回答