2016-07-13 2 views
1

Я использую scala-код для преобразования (short, int, long, float, double, bigint) в байтовый массив.Преобразование чисел (short, int, long, float, double, bigint) в массив байтов: Scala/Java

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 не имеет вспомогательного массива?

Исключение в потоке "основного" java.lang.UnsupportedOperationException в java.nio.ByteBuffer.array (ByteBuffer.java:994)

ответ

1
  1. Да, это все, что необходимо. Для nio-буферов нет очистки.
  2. Действительно, прямые буфера не имеет массива подкладочный.
Смежные вопросы