【问题标题】:Java: Conversion of String to byte array, then to long value and vice versaJava:将字符串转换为字节数组,然后转换为长值,反之亦然
【发布时间】:2021-04-06 21:30:04
【问题描述】:

基本上,我正在寻找 .NET 的 BitConverter

我需要从 String 中获取字节,然后将它们解析为 long 值并存储它。之后,读取长值,解析为字节数组并创建原始字符串。如何在 Java 中实现这一点?

编辑:有人确实已经问过类似的问题。我看起来更像是样本然后是 javadoc 参考...

【问题讨论】:

  • javadoc 参考有什么问题?
  • 为什么要将 byte[] 转换为 long[] 来存储它们。问题是 long 必须是 8 个字节的倍数,所以如果你的字符串不是 8 的倍数,你也必须记录长度。为什么不把 byte[] 保存为 byte[],这样最简单,效率更高。
  • @The Elite Gentleman 这是我自己做的事情,但无法弄清楚如何解决所描述的问题:)
  • @Javadoc 和大多数 API 文档一样,更擅长回答“这是做什么的?”而不是回答“我该怎么做?”。

标签: java bytearray


【解决方案1】:

String 有一个getBytes 方法。您可以使用它来获取字节数组。

要将字节数组存储为 long,我建议您将字节数组包装在 ByteBuffer 中并使用 asLongBuffer 方法。

要从字节数组中取回String,您可以使用String(byte[] bytes) 构造函数。

String input = "hello long world";

byte[] bytes = input.getBytes();
LongBuffer tmpBuf = ByteBuffer.wrap(bytes).asLongBuffer();
    
long[] lArr = new long[tmpBuf.remaining()];
for (int i = 0; i < lArr.length; i++)
    lArr[i] = tmpBuf.get();
    
System.out.println(input);
System.out.println(Arrays.toString(lArr));
// store longs...
    
// ...load longs
long[] longs = { 7522537965568945263L, 7955362964116237412L };
byte[] inputBytes = new byte[longs.length * 8];
ByteBuffer bbuf = ByteBuffer.wrap(inputBytes);
for (long l : longs)
    bbuf.putLong(l);
System.out.println(new String(inputBytes));

请注意,您可能想要存储一个额外的整数来说明长数组实际存储的字节数,因为字节数可能不是 8 的倍数。

【讨论】:

  • 你如何从字节中取回原始字符串?
  • 你将如何解析长回字节数组?
  • 那些长数字是什么?如果我将字符串更改为“Hello joe world”,结果又是“hello long world”
  • 我手动输入了与"hello long world" 对应的数字来模拟“从磁盘加载多头” :-) 您可以将longs = { ... 替换为longs = lArr; 来缩短它:)跨度>
  • 好的,让我们获取原始字符串。我将代码更新为: long[] longs = lArr;对于“hello long world”,它可以工作,对于“hello joe world”,它不会。自己试试吧:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
相关资源
最近更新 更多