Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android文件中存储字符串v/s ByteArray的文件大小不同_Java_Android_String_File_Bytearray - Fatal编程技术网

Java android文件中存储字符串v/s ByteArray的文件大小不同

Java android文件中存储字符串v/s ByteArray的文件大小不同,java,android,string,file,bytearray,Java,Android,String,File,Bytearray,我使用这种方法将来自服务器responce的数据存储在文件中 ByteArrayOutputStream outstream = new ByteArrayOutputStream(); response.getEntity().writeTo(outstream); byte[] responseBody = outstream.toByteArray(); String data = new String(responseBody); FileOutputStream out =

我使用这种方法将来自服务器responce的数据存储在文件中

 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字节的文件大小

有人能帮我理解这一点吗,这个
新字符串(responseBody)
对responcebytes有什么作用吗


任何帮助都将不胜感激。

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

字符串
保存文本。如果您的数据是原始二进制数据,并打算按原始二进制数据处理,则不应将其存储在
字符串中,而应将其存储在
字节[]

在第一位中根本不需要
字符串数据
,只需将
字节[]
写入文件:

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

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

是的,从字节构造
字符串
将根据当前默认字符编码对字节进行解码(如果未明确指定)。另外,
String.getBytes()
也会以相反的方式执行相同的操作(并且可能不一定会产生与创建它所用的相同的字节序列)。
字符串
保存文本。如果您的数据是原始二进制数据,并打算按原始二进制数据处理,则不应将其存储在
字符串中,而应将其存储在
字节[]
中。在第一位中根本不需要
字符串数据
,只需将
字节[]
写入文件。@JasonC,这应该是一个答案,而不是注释。@Egor我想,除非OP提供更多关于数据性质的信息,关于他的问题,这实际上是一个有根据的猜测。谢谢@JasonC的解释。实际上我正在创建(certificate).p12文件。第二个解决方案运行良好,我也可以在android中读取该证书。有没有办法找到byteArray编码?值得一提的是,Android上的默认编码是UTF-8。