我必须将字节数组转换为Android中的字符串,但我的字节数组包含负值。
如果我将该字符串再次转换为字节数组,我得到的值与原始字节数组值不同。
我该怎么做才能得到正确的转换?我用来做转换的代码如下:
// Code to convert byte arr to str:
byte[] by_original = {0,1,-2,3,-4,-5,6};
String str1 = new String(by_original);
System.out.println("str1 >> "+str1);
// Code to convert str to byte arr:
byte[] by_new = str1.getBytes();
for(int i=0;i<by_new.length;i++)
System.out.println("by1["+i+"] >> "+str1);
我被这个问题难住了。
问题出在哪里:有人已经指出:
如果你从一个字节[]开始,它实际上不包含文本数据,就没有“适当的转换”。字符串是用于文本的,字节[]是用于二进制数据的,唯一真正明智的做法是避免它们之间的转换,除非你绝对必须这样做。
当我试图从pdf文件创建byte[],然后将其转换为字符串,然后将字符串作为输入并转换回文件时,我观察到了这个问题。
所以确保你的编码和解码逻辑和我做的一样。我显式地将字节[]编码为Base64,并将其解码以再次创建文件。
用例:
由于一些限制,我试图在请求(POST)中发送字节[],过程如下:
PDF File >> Base64.encodeBase64(byte[]) >> String >> Send in request(POST) >> receive String >> Base64.decodeBase64(byte[]) >> create binary . bat
试试这个,这对我有用。
File file = new File("filePath");
byte[] byteArray = new byte[(int) file.length()];
try {
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(byteArray);
String byteArrayStr= new String(Base64.encodeBase64(byteArray));
FileOutputStream fos = new FileOutputStream("newFilePath");
fos.write(Base64.decodeBase64(byteArrayStr.getBytes()));
fos.close();
}
catch (FileNotFoundException e) {
System.out.println("File Not Found.");
e.printStackTrace();
}
catch (IOException e1) {
System.out.println("Error Reading The File.");
e1.printStackTrace();
}
问题出在哪里:有人已经指出:
如果你从一个字节[]开始,它实际上不包含文本数据,就没有“适当的转换”。字符串是用于文本的,字节[]是用于二进制数据的,唯一真正明智的做法是避免它们之间的转换,除非你绝对必须这样做。
当我试图从pdf文件创建byte[],然后将其转换为字符串,然后将字符串作为输入并转换回文件时,我观察到了这个问题。
所以确保你的编码和解码逻辑和我做的一样。我显式地将字节[]编码为Base64,并将其解码以再次创建文件。
用例:
由于一些限制,我试图在请求(POST)中发送字节[],过程如下:
PDF File >> Base64.encodeBase64(byte[]) >> String >> Send in request(POST) >> receive String >> Base64.decodeBase64(byte[]) >> create binary . bat
试试这个,这对我有用。
File file = new File("filePath");
byte[] byteArray = new byte[(int) file.length()];
try {
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(byteArray);
String byteArrayStr= new String(Base64.encodeBase64(byteArray));
FileOutputStream fos = new FileOutputStream("newFilePath");
fos.write(Base64.decodeBase64(byteArrayStr.getBytes()));
fos.close();
}
catch (FileNotFoundException e) {
System.out.println("File Not Found.");
e.printStackTrace();
}
catch (IOException e1) {
System.out.println("Error Reading The File.");
e1.printStackTrace();
}