将数字(short,int,long,float,double,bigint)转换为字节数组:Scala / Java

时间:2016-07-13 07:04:01

标签: java scala bytebuffer

我遵循scala代码将(short,int,long,float,double,bigint)转换为字节数组。

def getByteArray(value: Any, of_type: String) = {
    of_type match {
      case "short" => ByteBuffer.allocate(2).putShort(value.asInstanceOf[Short]).array()
      case "int" => ByteBuffer.allocate(4).putInt(value.asInstanceOf[Int]).array()
      case "long" => ByteBuffer.allocate(8).putLong(value.asInstanceOf[Long]).array()
      case "float" => ByteBuffer.allocate(4).putFloat(value.asInstanceOf[Float]).array()
      case "double" => ByteBuffer.allocate(8).putDouble(value.asInstanceOf[Double]).array()
      case "bigint" => BigInt(value.toString).toByteArray
    }
  }
  1. 这一切都需要吗?我是否需要在最后调用任何清理方法clear()mark()reset()以确保没有ByteBuffer泄漏

  2. 当我使用allocateDirect方法时,它会抛出异常。那么,这是否意味着allocateDirect方法没有后备数组?

  3.   

    线程“main”java.lang.UnsupportedOperationException中的异常           在java.nio.ByteBuffer.array(ByteBuffer.java:994)

1 个答案:

答案 0 :(得分:1)

  1. 是的,这就是所需要的。在nio Buffers上没有清理工作。
  2. 实际上,直接缓冲区没有后备阵列。