【问题标题】:Different sizes of file in storing String v/s ByteArray in File android在文件android中存储字符串与字节数组的文件大小不同
【发布时间】: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


【解决方案1】:

是的,从字节构造String 会根据当前默认字符编码(如果未明确指定)解码字节。 String.getBytes() 也反向执行相同的操作(并且可能不一定产生用于创建它的相同字节序列)。

String 保存文本。如果您的数据是原始二进制数据并且打算这样处理,则不应将其存储在String 中,而应将其存储在byte[] 中。

在第一个位中根本不需要String data,只需将byte[] 写入文件即可:

 byte[] responseBody = outstream.toByteArray();
 String data = new String(responseBody);
 ...
 out.write(data.getBytes());

只能是:

 byte[] responseBody = outstream.toByteArray();
 ...
 out.write(responseBody);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多