Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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 将字节[]转换为字符串_Java - Fatal编程技术网

Java 将字节[]转换为字符串

Java 将字节[]转换为字符串,java,Java,我有一个byte[]类型的bytearray,长度为17字节,我想将其转换为字符串,并希望将此字符串用于另一个比较,但我得到的输出格式不符合验证要求,我正在使用下面的方法进行转换。我希望输出为易于验证的字符串,并给出相同的字符串进行比较 byte[] byteArray = new byte[] {0,127,-1,-2,-54,123,12,110,89,0,0,0,0,0,0,0,0}; String value = new String(byteArray); Sy

我有一个byte[]类型的bytearray,长度为17字节,我想将其转换为字符串,并希望将此字符串用于另一个比较,但我得到的输出格式不符合验证要求,我正在使用下面的方法进行转换。我希望输出为易于验证的字符串,并给出相同的字符串进行比较

    byte[] byteArray = new byte[] {0,127,-1,-2,-54,123,12,110,89,0,0,0,0,0,0,0,0};
    String value = new String(byteArray);
    System.out.println(value);

输出:���{nY

它是什么编码?您应该明确定义它:

new String(byteArray, Charset.forName("UTF-32"));  //or whichever you use
否则结果是不可预测的(从构造函数JavaDoc):

通过使用平台的默认字符集对指定的字节数组进行解码来构造新字符串

顺便说一句,我刚刚用UTF-8、UTF-16和UTF-32进行了尝试-所有这些都会产生虚假的结果。一长串的
0
让我相信这实际上不是一个文本。你从哪里获得这些数据

更新:我已使用机器上可用的所有字符集进行了尝试:

for (Map.Entry<String, Charset> entry : Charset.availableCharsets().entrySet())
{
    final String value = new String(byteArray, entry.getValue());
    System.out.println(entry.getKey() + ": " + value);
}
for(Map.Entry:Charset.availableCharsets().entrySet())
{
最终字符串值=新字符串(byteArray,entry.getValue());
System.out.println(entry.getKey()+“:”+值);
}
没有编码产生任何接近人类可读文本的内容……您的输入不是文本。

它实际上是编码文本吗?如果是,请指定编码

但是,您得到的数据看起来并不是真正的文本。在我看来,它只是任意的二进制数据。如果它不是真正的文本,我建议根据需要将其转换为十六进制或base64。有一个很好的方法可以使用

String text = Base64.encodeBytes(byteArray);
和解码:

byte[] data = Base64.decode(text):

也许您应该指定一个字符集:

String value = new String(byteArray, "UTF-8");
使用方法如下:

byte[] byteArray = new byte[] {0,127,-1,-2,-54,123,12,110,89,0,0,0,0,0,0,0,0};
String value = Arrays.toString(byteArray);
System.out.println(value);
您的输出将是

[0,127,-1,-2,-54,123,12,110,89,0,0,0,0,0,0,0,0]

我不能百分之百肯定你说的对。这是你想要的吗

String s = null;
StringBuffer buf = new StringBuffer("");
byte[] byteArray = new byte[] {0,127,-1,-2,-54,123,12,110,89,0,0,0,0,0,0,0,0};
for(byte b : byteArray) {
  s = String.valueOf(b);
  buf.append(s + ",");
}
String value = new String(buf);
System.out.println(value);

您希望获得什么样的输出?请尝试
新字符串(byteArray,“US-ASCII”)
或新字符串(byteArray,“UTF-8”)`或者类似的。可能是+1的重复,因为我相信这是OP真正想要的。数组中的数字显然不代表任何类型的字符编码。因为在我看来他只是想使用字符串比较,他可以用相同的方式对输入字符串进行编码,然后比较两个编码的字符串。为什么y当您使用
+
进行连接时,是否仍要使用
StringBuffer