我创建了一个文件的字节数组。
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然后再转换回相同的字节数组?
答案 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");
鼓励提供显式编码字符集,因为不同的编码方案可能具有不同的字节表示。阅读更多here和here。
此外,您的输入流可能无法一次性读取所有内容。你必须循环阅读,直到没有更多的东西可以阅读。阅读documentation。 read()
返回读取的字节数。
将此输入流中的最多 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)是需要考虑的方法。