【发布时间】:2014-03-21 06:56:49
【问题描述】:
我正在使用这种方法将来自服务器响应的数据存储在文件中。
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
response.getEntity().writeTo(outstream);
byte[] responseBody = outstream.toByteArray();
String data = new String(responseBody);
FileOutputStream out = new FileOutputStream(new File(my_path));
out.write(data.getBytes());
out.flush();
out.close();
它工作正常,我的文件被创建,它的大小是 3786 字节。
现在考虑一下,
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
response.getEntity().writeTo(outstream);
byte[] responseBody = outstream.toByteArray();
FileOutputStream out = new FileOutputStream(new File(my_path));
out.write(responseBody);
out.flush();
out.close();
它给出的文件大小为 1993 字节。
谁能帮我理解这一点,new String(responseBody) 是否对响应字节做一些编码?
任何帮助将不胜感激。
【问题讨论】:
-
是的,从字节构造
String会根据当前默认字符编码(如果未明确指定)解码字节。String.getBytes()也反过来做同样的事情(并且可能不一定产生与创建它相同的字节序列)。String包含文本。如果您的数据是原始二进制数据并且打算这样处理,则不应将其存储在String中,而应将其存储在byte[]中。在第一位根本不需要String data,只需将byte[]写入文件即可。 -
@JasonC,这真的应该是一个答案,而不是评论。
-
@Egor 我想,尽管除非 OP 提供有关数据性质的更多信息,否则这实际上更像是对他的问题的有根据的猜测。
-
感谢@JasonC 的解释。实际上我正在创建(证书).p12 文件。第二个解决方案工作正常,我也可以在 android 中读取该证书。有没有办法找到 byteArray 编码?
-
不管怎样,Android 上的默认编码是 UTF-8。
标签: java android string file bytearray