我有一个字节数组,我需要将其写入 txt 文件。之后我需要从那里读取该字节数组,这里出现了一个问题。我读了这个将Java字符串转换为字节数组 https://stackoverflow.com/questions/5499924/convert-java-string-to-byte-array/5500020#5500020但它仅适用于正数。
这是我有的
public static void main(String args[]) throws UnsupportedEncodingException
{
byte [] a= new byte [2];
a[0]=15;
a[1]=-2;
String line = new String(a, "UTF-8");
byte[] b = line.getBytes();
System.out.println(b[0]);
System.out.println(b[1]);
}
结果是
15
63
toString()
效果不太好。
预先感谢您的帮助。
对我来说,这保留了负值:
package com.sandbox;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Arrays;
public class Sandbox {
public static void main(String args[]) throws UnsupportedEncodingException {
byte[] a = new byte[2];
a[0] = 15;
a[1] = -2;
String line = new String(a);
byte[] b = line.getBytes();
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
System.out.println(Charset.defaultCharset());
}
}
对我来说,这输出:
[15, -2]
[15, -2]
windows-1250
基本上,您使用了错误的字符集来保留负字节。您可以在这里找到更多信息。 https://stackoverflow.com/questions/1749064/how-to-find-default-charset-encoding-in-java实际上,您想要做的事情的缺陷是首先将字节放入字符串中。正如你在这里看到的 https://stackoverflow.com/a/1536365/61624,
...如果您从 byte[] 开始并且它实际上不包含文本数据,则不存在“正确的转换”。字符串用于文本,byte[] 用于二进制数据,唯一真正明智的做法是避免在它们之间进行转换,除非绝对必要。
如果您确实必须使用 String 来保存二进制数据,那么最安全的方法是使用 Base64 编码。
如果您实际上不需要将其存储在字符串中,则应该从输入/输出流写入/读取文件。有很多答案向您展示如何做到这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)