首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无需创建新对象即可将int[]转换为byte[]

无需创建新对象即可将int[]转换为byte[]
EN

Stack Overflow用户
提问于 2009-08-24 14:42:35
回答 3查看 572关注 0票数 2

我在java中有一个int[],我想把它转换成byte[]。

现在,通常的方法是创建一个4倍于整数数组大小的新byte[],并将所有int逐字节复制到新的字节数组中。

然而,这样做的唯一原因是因为java的类型安全规则。int数组已经是字节数组。只是java不允许将int[]转换为byte[],然后将其用作byte[]。

有没有办法,比如使用jni,让int数组在java中看起来像一个字节数组?

EN

回答 3

Stack Overflow用户

发布于 2009-08-24 14:45:16

不是的。没有使用原生Java数组接口实现对象的功能。

在我看来,您需要一个包装int[]的对象,并以字节数组的方式提供访问它的方法。例如:

代码语言:javascript
复制
public class ByteArrayWrapper {
   private int[] array;

   public int getLength() {
      return array.length * 4;
   }

   public byte get(final int index) {
      // index into the array here, find the int, and then the appropriate byte
      // via mod/div/shift type operations....
     int val = array[index / 4];
     return (byte)(val >> (8 * (index % 4)));
   }
}

(以上代码未经过测试/编译等,并取决于您的字节排序要求。这纯粹是说明性的)

票数 9
EN

Stack Overflow用户

发布于 2009-08-25 14:48:58

根据您的具体要求,您可以使用NIO的java.nio.ByteBuffer类。作为ByteBuffer进行初始分配,并使用它的getIntputInt方法访问int值。当您需要访问以字节为单位的缓冲区时,可以使用getput方法。ByteBuffer还有一个asIntBuffer方法,它将默认的get和put行为更改为int而不是byte。

如果你正在使用JNI,直接分配的ByteBuffer (在某些情况下)允许在你的C代码中直接指针访问。

http://java.sun.com/javase/6/docs/api/java/nio/ByteBuffer.html

例如,

代码语言:javascript
复制
import java.nio.ByteBuffer;
import java.nio.IntBuffer;

// …

int[] intArray = { 1, 2, 3, 4 };

ByteBuffer byteBuffer = ByteBuffer.allocate(data.length * 4);        
IntBuffer intBuffer = byteBuffer.asIntBuffer();
intBuffer.put(intArray);

byte[] byteArray = byteBuffer.array();
票数 4
EN

Stack Overflow用户

发布于 2009-08-24 15:45:02

如果你真的必须这样做,你可以在C中使用外部调用来做这件事,但我非常确定这不能在语言中完成。

我也很好奇现有的代码是什么样子的,以及您期望的额外速度有多快。

你知道优化的规则,对吧?

  • 1)请勿优化。
  • 2)如果您是专家,请参阅规则1。
  • 3)如果您是专家,编写了尽可能清晰的代码,并且计时测试失败,则:
  • 3a)编写优化版本并将未优化的代码保留为注释

< code >H193b)重新测试,如果您的优化代码未通过速度测试,请在注释中还原!< code >H210

  • 3c)确切地解释您以这种方式编码的原因。如果规则3看起来太麻烦,请包括您的速度测量和对requirements.
  • 3d)的引用,请参阅规则1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1322819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档