我有一个字节数组,我需要写入txt文件。之后我需要从那里读取那个字节数组,这里出现问题。我读了这个Convert Java string to byte array 但它只适用于正数。 我在这里有什么
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()
也不起作用。
提前感谢您的帮助。
答案 0 :(得分:0)
对我来说,这保留了负值:
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
基本上,您使用错误的字符集来保留负字节。 You can find more info here.实际上,您尝试做的事情的缺陷是首先将字节放入字符串中。 As you can see here,
...如果以字节[]开头并且实际上不包含文本数据,则没有“正确的转换”。字符串用于文本,byte []用于二进制数据,唯一真正明智的做法是避免在它们之间进行转换,除非你绝对不得不这样做。
如果你真的必须使用String来保存二进制数据,那么最安全的方法是使用Base64编码。
如果您实际上不需要将其存储在String中,则应该将输入/输出流写入/读取到该文件。有很多SO答案告诉你如何做到这一点。
答案 1 :(得分:0)
我编写了一个将函数[-3, 123, 89, 0, -34, 78, -45, -78]
转换为字节数组的小函数。我不知道如何使用Base64编码。所以我写了我的小函数。
要获得上面提到的字符串,我们应该String line = new String(Arrays.toString(name_of_array))
public class StringToByteArray {
public static void main(String args[])
{
String line= "[-3, 123, 89, 0, -34, 78, -45, -78]";
String some=line.substring(1, line.length()-1);
int element_counter=1;
for(int i=0; i<some.length(); i++)
{
if (some.substring(i, i+1).equals(","))
{
element_counter++;
}
}
int [] comas =new int[element_counter-1];
byte [] a=new byte[element_counter];
if (a.length==1)
{
a[0]= Byte.parseByte(some.substring(0));
}
else
{
int j=0;
for (int i = 0; i < some.length(); i++)
{
if (some.substring(i, i+1).equals(","))
{
comas[j]=i;
j++;
}
}
for (int i=0; i<element_counter; i++)
{
if(i==0)
{
a[i]=Byte.parseByte(some.substring(0, comas[i]));
}
else if (i==element_counter-1)
{
a[i]=Byte.parseByte(some.substring(comas[comas.length-1]+2));
}
else
{
a[i]=Byte.parseByte(some.substring(comas[i-1]+2, comas[i]));
}
}
}
System.out.println(a[0]);
}
}
结果-3
我希望它会有所帮助