我必须在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);
Run Code Online (Sandbox Code Playgroud)
我陷入了这个问题.
我试图从服务器接收一个将包装在JSON中的pdf.
如果我只是将pdf的字节数组发送到前端,我可以通过设置responseType来正确读取它arraybuffer,然后我可以通过以下方式下载pdf:
var blob = new Blob([data], { type: application/pdf});
if ($window.navigator && $window.navigator.msSaveOrOpenBlob) {
$window.navigator.msSaveOrOpenBlob(blob);
} else {
var a = document.createElement("a");
document.body.appendChild(a);
var fileURL = URL.createObjectURL(blob);
a.href = fileURL;
a.download = fileName;
a.click();
}
}
Run Code Online (Sandbox Code Playgroud)
但是当服务器尝试发送带有bytearray的JSON时,如果我设置为responseTypeto JSON,那么我将无法转换blob.但是,如果我设置responseType为arrayBuffer,我将获得一个arrayBuffer数组,如何将其转换为JSON,同时仍然能够提取pdf:
我收到的JSON格式如下:
{
result: true,
value: <the pdf byte array>,
errorMessage: null
}
Run Code Online (Sandbox Code Playgroud) 我有一个字节数组,其值[B@6c89db9a已经将此值存储在MySQL数据库中作为字符串表示 -mybyteArray.toString()
我想从数据库中检索保存的值,并使用原始字节数组的字符串值创建一个新的字节数组.
我已经尝试了Java Byte Array到String By By By Array的示例
但是我没有得到原始的字节数组值.它产生了不同的价值.任何人都可以建议吗?
我需要通过Internet发送和接收大字节数组(http restful service).
我能想到的最简单的方法是将字节数组转换为字符串.
我搜索了一下,发现这个帖子Java Byte Array to String to Byte Array
我有以下代码来验证转换的准确性.
System.out.println("message");
System.out.println (message);
String message = "Die Strahlengriffelgewächse stammen...";
byte[] pack = Fbs.packExce(message);
System.out.println ("pack");
System.out.println (pack);
System.out.println ("packlenght:" + pack.length);
String toString = new String(pack);
System.out.println ("toString");
System.out.println (toString);
byte[] toBytes = toString.getBytes();
System.out.println ("toBytes");
System.out.println (toBytes);
System.out.println ("toByteslength:" +toBytes.length);
Run Code Online (Sandbox Code Playgroud)
"Fbs.packExce()"是一种获取大块字符串并生成大字节数组的方法.
我改变了消息的长度,检查并打印出字节数组的长度,然后转换为字符串并转换回来.
我得到了以下结果:
...
pack
[B@5680a178
packlenght:748
...
toBytes
[B@5fdef03a
toByteslength:750
----------------------
...
pack
[B@5680a178
packlenght:1016
...
toBytes
[B@5fdef03a
toByteslength:1018
Run Code Online (Sandbox Code Playgroud)
我省略了"消息",因为它太长了.
10次中的8次,我可以看到派生的字节数组(新的,称"toBytes")比原始字节数组("pack")长2个字节
我说过10个中的8个,因为在派生和原始之间的长度相同的情况下也会出现,见下文 …
java ×3
bytearray ×2
angularjs ×1
arraybuffer ×1
arrays ×1
javascript ×1
json ×1
mysql ×1
string ×1