在Java中将字节数组转换为int数组,通过ByteBuffer转换为IntBuffer,而不截断

时间:2015-10-26 17:04:37

标签: java arrays int bytearray bytebuffer

此处发布了有关此主题的其他问题,其中大多数问题涉及ByteBufferasIntBuffer。但是,我没有看到任何关于如何在转换为IntBuffer时保持值不被截断的解释。

示例:

byte[] plainTextBytes = "Hello World".getBytes();

// Truncates the limit from 11 to 2
IntBuffer intBuffer = ByteBuffer.wrap( plainTextBytes ).asIntBuffer();

// Results in java.lang.UnsupportedOperationException
int[] plainTextInt = intBuffer.array();

我有一个RC4加密算法,它采用int[]类型的明文参数。因此,我需要将明文转换为int[]ByteBuffer的问题和asIntBuffer的使用是明文被截断,因为限制是独立的(在我的例子中从11变为2)。

要么我做错了,要么ByteBuffer不是去这里的方式。

任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:2)

您好,如果您不需要使用IntBuffer,可以试试这个。

.copyright {
    width: 100px;
    border: thin solid #F48C13;
}

---------------------
| ----------------- |
| |               | |
| |  div content  | |
| |               | |
| ----------------- |
---------------------
  |               |
  |<------------->|    -----> A) div width = 100px
|                   |
| |               | |
<->               <->  -----> B) div border size = 1px
   \             /       (the size you enter is for each side)
     border size        ("thin" in border size is equal to 1px)
|                   |
|                   |
|<----------------->|  -----> total/final div width = 102px
                                 B + A + B
                                1 + 100 + 1 = 102px
       or use 98px as width...  1 +  98 + 1 = 100px

您基本上将字节直接转换为整数。

答案 1 :(得分:2)

使用ByteBuffer并不适合您的需求。文档说

  

返回支持此缓冲区的字节数组(可选操作)。

     

<强>抛出:
  ReadOnlyBufferException - 如果此缓冲区由数组支持但是只读为
  UnsupportedOperationException - 如果此缓冲区不由可访问的数组

支持

您在代码中使用了两个缓冲区。第一个是包含数组的#array()。因此,此缓冲区由数组支持,对#asIntBuffer()的调用有效。您通过UnsupportedOperationException创建的第二个。此缓冲区只是第一个缓冲区的视图由数组支持。因此,您在调用array()时会看到byte[]

您想加密int[],但您的算法适用于{{1}}。然后Jawad回答你的路。