如何将String格式的字节数组转换为字节数组?

时间:2013-09-20 07:49:33

标签: java arrays

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

    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输入,我必须将上面的字节数组放在String格式中。在以字符串格式读取字节数组后,我需要再次将其转换回字节数组。     所以,帮我找;

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

4 个答案:

答案 0 :(得分:4)

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

但是,因为在你的例子中你读了一个PDF文件,我不确定你是否真的可以期待纯文本数据,无论是否有任何字符编码。

所以在这种情况下 - 根据您正在处理的应用程序的其余部分 - 您可能希望在JSON字符串中传输二进制数据。一种常见的方法是将二进制数据转换为Base64,并在传输后从接收到的Base64字符串中恢复二进制数据。 How do I convert a byte array to Base64 in Java? 是这项任务的一个很好的起点。

答案 1 :(得分:1)

String类为此提供了重载constructor

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

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

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

此外,您的输入流可能无法一次性读取所有内容。你必须循环阅读,直到没有更多的东西可以阅读。阅读documentationread()返回读取的字节数。

  

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

答案 2 :(得分:0)

将字节数组转换为String

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

将字符串转换为字节数组

 byte bArray[] =s.getBytes("ISO-8859-1");   

答案 3 :(得分:0)

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