当前位置: 首页 > 知识库问答 >
问题:

Java字节缓冲到字符串

刘野
2023-03-14

用这种方式将字节缓冲符转换为字符串是否正确,

String k = "abcd";
ByteBuffer b = ByteBuffer.wrap(k.getBytes());
String v = new String(b.array());

if(k.equals(v))
    System.out.println("it worked");
else
    System.out.println("did not work");

我问这个问题的原因是,这看起来太简单了,而像Java这样的其他方法:将字符串转换成字节缓冲符和相关问题看起来更复杂。

共有3个答案

储思聪
2023-03-14

试试这个:

new String(bytebuffer.array(), "ASCII");

注意。在不知道编码的情况下,无法将字节数组正确转换为字符串。

我希望这有帮助

夏兴平
2023-03-14

编辑(2018):由@xinyongCheng编辑的兄弟姐妹答案更简单,应该是公认的答案。

如果您知道字节在平台的默认字符集中,您的方法将是合理的。在您的示例中,这是真的,因为k.getBytes()返回平台默认字符集中的字节。

更常见的情况是,您希望指定编码。然而,有一种比您链接的问题更简单的方法来实现这一点。字符串应用编程接口提供了在特定编码中在字符串和字节[]数组之间转换的方法。这些方法建议“当需要对解码[编码]过程进行更多控制时”使用CharsetEncoder/CharsetDecoder

要从特定编码的字符串中获取字节,可以使用同级getBytes()方法:

byte[] bytes = k.getBytes( StandardCharsets.UTF_8 );

要将具有特定编码的字节放入字符串中,可以使用不同的字符串构造函数:

String v = new String( bytes, StandardCharsets.UTF_8 );

请注意,ByteBuffer。array()是可选操作。如果您已经用数组构造了字节缓冲区,那么可以直接使用该数组。否则,如果你想安全,可以使用ByteBuffer。get(byte[]dst,int offset,int length)将缓冲区中的字节放入字节数组。

公羊子真
2023-03-14

安迪·托马斯提到,有一种更简单的方法可以毫无问题地将ByteBuffer解码成String

String s = StandardCharsets.UTF_8.decode(byteBuffer).toString();
 类似资料:
  • 我有这行代码 其中缓冲区是字节缓冲区。 有没有一种方法可以在不分配新字符串和/或复制字符数组的情况下将字节缓冲符转换为字符串?(也就是说,有没有办法将字符串的char[]值安全地指向字节缓冲区的byte[]hb?) 谢谢

  • 我目前正在处理一些小的endian二进制数据,我已经到了一个尴尬的地步,需要将奇数字节转换成整数值。 现在使用类,我能够很好地使用函数读取int和long,它们分别读取4和8个字节。 然而,在本例中,我需要读取三个字节,并将它们转换为int。我尝试过使用(2字节1字节),但我认为这不是正确的方法。 我猜我需要对字节进行位移位才能得到正确的int值,但我总是对位移位感到困惑。 此外,我还以为字节缓冲

  • 问题内容: 我试图理解一个到字符串,一个的字符串表示形式到转换…我将我的转换成一个要发送的字符串,然后我希望我的Web服务(用python编写)将数据直接回显给客户端。 当我从Java应用程序发送数据时… 字节发送.. 发送(这是Arrays.toString()的结果,它应该是我的字节数据的字符串表示形式,该数据将通过电线发送): 在python端,python服务器将字符串返回给调用方(我可以

  • 我一直在测试char casting,我经历了以下几点: 有人能解释为什么我在1中给字节添加了一个final时它工作得很好吗?

  • Javascript ArrayBuffer或TypedArrays没有任何类型的appendByte()、appendBytes()或appendBuffer()方法。所以,如果我想一次填充一个数组缓冲一个值,我该怎么做呢?

  • 协议缓冲区说它可以包含任何任意的字节序列。但是如果我的数据包含“\0”,协议缓冲区如何从字符串变量对我的整个数据进行编码。