【发布时间】:2015-12-11 12:26:12
【问题描述】:
似乎我在使用 java ByteBuffer 时发现了非常奇怪的行为。我的目的是填写ByteBuffer 并使用compareTo 方法。我正在使用 Ubuntu 在 OpenJDK 64 位上运行。代码 sn-p 是 scala 工作表,但在 java 类中它的行为相同。
这工作正常:
import java.nio.{ByteOrder, ByteBuffer}
import org.apache.commons.codec.binary.Hex
val str1 = "FFFFFFFFFFF000000000000000000000"
val str2 = "FFFFFFFFFFFF00000000000000000000"
val bb1 = ByteBuffer.wrap(Hex.decodeHex(str1.toCharArray))
val bb2 = ByteBuffer.wrap(Hex.decodeHex(str2.toCharArray))
println(
s"""
|bb1 hex: ${new String(Hex.encodeHex(bb1.array()))}
|bb2 hex: ${new String(Hex.encodeHex(bb2.array()))}
|Comparing: bb1.compareTo(bb2): ${ bb1.compareTo(bb2)}
""".stripMargin)
bb1 hex: fffffffffff000000000000000000000
bb2 hex: ffffffffffff00000000000000000000
Comparing: bb1.compareTo(bb2): -15
这不起作用(也不知道为什么)
import java.nio.{ByteOrder, ByteBuffer}
import org.apache.commons.codec.binary.Hex
val str1 = "FFFFFFFFFFF000000000000000000000"
val str2 = "FFFFFFFFFFFF00000000000000000000"
val bb1 = ByteBuffer.allocate(16)
val bb2 = ByteBuffer.allocate(16)
bb1.put(Hex.decodeHex(str1.toCharArray))//Do the same like in wrap
bb2.put(Hex.decodeHex(str2.toCharArray))//Do the same like in wrap
println(
s"""
|bb1 hex: ${new String(Hex.encodeHex(bb1.array()))}
|bb2 hex: ${new String(Hex.encodeHex(bb2.array()))}
|Comparing: bb1.compareTo(bb2): ${ bb1.compareTo(bb2)}
""".stripMargin)
bb1 hex: fffffffffff000000000000000000000
bb2 hex: ffffffffffff00000000000000000000
Comparing: bb1.compareTo(bb2): 0
【问题讨论】:
标签: java scala hex bytebuffer