我们可以直接在Java的字节缓冲区中读取对象吗?

用户3495562

说我有一个List<Integer> ls,我知道它的长度,我们可以为字节缓冲区分配length * 4个字节,并使用putltilst将ls读入缓冲区吗?

马库斯A.

这应该可以满足您的需求:

ByteBuffer buffer = ByteBuffer.allocate(ls.size()*4);
for (Integer i: ls)
    buffer.putInt(i);

一个警告:此函数假定您的列表不包含任何条目。

我认为您没有比这更好的方法了,因为其中的Integer对象基础数组ls是对这些Integer对象而不是其包含的int-values的引用(指针)数组实际Integer对象将以某种随机顺序驻留在内存中,大致取决于创建它们的时间。因此,不太可能找到连续的内存块,其中包含需要复制到自己的数据ByteBuffer(我认为这就是“直接读取”它的意思。)因此,类似using之类的东西sun.misc.Unsafe可能无法在这里为您提供帮助。

即使您使用了aint[]而不是a,List<Integers>您也可能无法可靠地将数据直接从内存中直接读取到您的中ByteBuffer,因为64位计算机上的某些JVM会将64位地址位置上的所有值对齐,以实现更快的访问,会导致您之间的“差距” ints还有一个问题,字节序可能因平台而异...

编辑:

嗯...我只是看了一下将要调用的putInt()函数OpenJDK源代码...子函数调用真是一团糟。如果“ sun”实现很糟糕,那么如果您要寻找性能,最好自己进行转换(使用shift和binary-ops)...最快的方法可能是将您的转换Integers为一byte[],然后使用ByteBuffer.wrap(...),如果你需要的答案的ByteBuffer让我知道您是否需要代码...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java中的协议缓冲区:我们可以有效地处理原始数组吗?

来自分类Dev

我们可以直接在JSF xhtml文件中访问会话范围变量吗

来自分类Dev

我们可以直接在Rails中渲染数组以进行Ajax调用吗?

来自分类Dev

我们可以直接在SQL Server的datetime变量中添加数字吗

来自分类Dev

直接字节缓冲区

来自分类Dev

C / C ++中难以理解的语法!!为什么我们可以这样分配缓冲区?

来自分类Dev

C / C ++中难以理解的语法!!为什么我们可以这样分配缓冲区?

来自分类Dev

我们可以直接在vuejs中绑定值吗,例如v-bind:value =“'India'”

来自分类Dev

我们可以直接在C#中将DataTable转换为XML吗?

来自分类Dev

将Python集成到Java中-我们可以直接调用.py文件吗?

来自分类Dev

为什么我们可以直接在ByteBuffer中分配字节而不在FloatBuffer中分配浮点

来自分类Dev

我们可以在文件中存储多个对象吗?

来自分类Dev

我们可以在对象中接收@RequestParam吗

来自分类Dev

我们可以在文件中存储多个对象吗?

来自分类Dev

我们可以在customfilter中访问用户输入值吗?尝试从控制器或直接在customfilter中访问用户输入号码

来自分类Dev

我们可以直接使用Entry类创建单个key:value对象,而不是像Java的HashMaps中那样创建一组key:value对吗?

来自分类Dev

NodeJS缓冲区从字节读取位

来自分类Dev

我们可以从十六进制值读取第4个字节吗?

来自分类Dev

Java-我们可以在构造函数中声明对象变量吗?

来自分类Dev

为什么在渲染过程中我们必须清除OpenGL中的深度缓冲区?

来自分类Dev

Java 映射字节缓冲区 - 缓冲区中的垃圾值

来自分类Dev

我们可以在Java中模拟Web容器吗?

来自分类Dev

Java中的并发读/写缓冲区字节[]

来自分类Dev

读取node.js中的缓冲区对象

来自分类Dev

我可以在以后的itoa()调用中重用相同的缓冲区吗?

来自分类Dev

我可以从“ * vc-dir *”缓冲区中删除文件吗?

来自分类Dev

我可以重用open_memstream中的缓冲区吗

来自分类Dev

我可以在emacs中以垂直分割查看两个缓冲区吗?

来自分类Dev

如何解析直接内存中的Google协议缓冲区而不在Java中分配堆字节数组?

Related 相关文章

  1. 1

    Java中的协议缓冲区:我们可以有效地处理原始数组吗?

  2. 2

    我们可以直接在JSF xhtml文件中访问会话范围变量吗

  3. 3

    我们可以直接在Rails中渲染数组以进行Ajax调用吗?

  4. 4

    我们可以直接在SQL Server的datetime变量中添加数字吗

  5. 5

    直接字节缓冲区

  6. 6

    C / C ++中难以理解的语法!!为什么我们可以这样分配缓冲区?

  7. 7

    C / C ++中难以理解的语法!!为什么我们可以这样分配缓冲区?

  8. 8

    我们可以直接在vuejs中绑定值吗,例如v-bind:value =“'India'”

  9. 9

    我们可以直接在C#中将DataTable转换为XML吗?

  10. 10

    将Python集成到Java中-我们可以直接调用.py文件吗?

  11. 11

    为什么我们可以直接在ByteBuffer中分配字节而不在FloatBuffer中分配浮点

  12. 12

    我们可以在文件中存储多个对象吗?

  13. 13

    我们可以在对象中接收@RequestParam吗

  14. 14

    我们可以在文件中存储多个对象吗?

  15. 15

    我们可以在customfilter中访问用户输入值吗?尝试从控制器或直接在customfilter中访问用户输入号码

  16. 16

    我们可以直接使用Entry类创建单个key:value对象,而不是像Java的HashMaps中那样创建一组key:value对吗?

  17. 17

    NodeJS缓冲区从字节读取位

  18. 18

    我们可以从十六进制值读取第4个字节吗?

  19. 19

    Java-我们可以在构造函数中声明对象变量吗?

  20. 20

    为什么在渲染过程中我们必须清除OpenGL中的深度缓冲区?

  21. 21

    Java 映射字节缓冲区 - 缓冲区中的垃圾值

  22. 22

    我们可以在Java中模拟Web容器吗?

  23. 23

    Java中的并发读/写缓冲区字节[]

  24. 24

    读取node.js中的缓冲区对象

  25. 25

    我可以在以后的itoa()调用中重用相同的缓冲区吗?

  26. 26

    我可以从“ * vc-dir *”缓冲区中删除文件吗?

  27. 27

    我可以重用open_memstream中的缓冲区吗

  28. 28

    我可以在emacs中以垂直分割查看两个缓冲区吗?

  29. 29

    如何解析直接内存中的Google协议缓冲区而不在Java中分配堆字节数组?

热门标签

归档