问题标签 [bytebuffer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ByteBuffer.allocateDirect() 和 MappedByteBuffer.load() 之间的区别
我试图通过使用MappedByteBuffer
. 从规范中我看到,当我们使用MappedByteBuffer.load()
它时,它应该将数据加载到直接缓冲区中。我对此有几个问题。
我的代码片段::
上述代码的输出是 0 字节的 Direct Memory Usage(File.txt 为 1 GB)。但是,如果我取消注释该行..
我得到 100MB 的直接内存使用量。无法理解为什么会这样,至于为什么我没有得到任何直接的内存使用(即当该行被注释掉时)
尽管上述代码的 Direct Memory Usage 为 0 B,但我确实看到进程的常驻内存(使用 unix top )增加了 1 GB。但是如果我在盒子上执行“free -m”,我看不到内存使用量有任何增加。
在这两种情况下,我都对内存的结束位置感到有些困惑。
谢谢!
java - Java:将 String 与 ByteBuffer 相互转换以及相关问题
我正在使用 Java NIO 进行套接字连接,并且我的协议是基于文本的,因此我需要能够在将字符串写入 SocketChannel 之前将它们转换为 ByteBuffer,并将传入的 ByteBuffer 转换回字符串。目前,我正在使用以下代码:
这在大多数情况下都有效,但我质疑这是否是执行此转换的每个方向的首选(或最简单)方法,或者是否有其他方法可以尝试。即使每次转换完成时我都使用一个新的 ByteBuffer 对象,有时,并且看似随机地调用encode()
并decode()
会引发
异常或类似情况。java.lang.IllegalStateException: Current state = FLUSHED, new state = CODING_END
我需要同步这些方法吗?有更好的方法在字符串和字节缓冲区之间进行转换吗?谢谢!
c# - 等效于 C# 中 Java 的“ByteBuffer.putType()”
我正在尝试通过从 Java 移植代码来格式化 C# 中的字节数组。在 Java 中,使用方法“buf.putInt(value);”、buf.putShort、buf.putDouble(等等)。但是我不知道如何将其移植到 C#。我已经尝试过 MemoryStream 类,但是没有方法可以将特定类型放在字节数组的末尾。
问题:C# 中 Java 的“ByteBuffer.putType(value)”等价物是什么?谢谢!
c# - .NET 中“ByteBuffer.flip”和“ByteBuffer.slice”的等价物是什么?
我需要将代码从 Java 移植到 C#。在 Java 代码中,使用了“ByteBuffer.flip()”和“ByteBuffer.slice”方法,我不知道如何翻译。
我已经阅读了这个问题(相当于 c# 中的 javax.nio.Buffer.flip()),但是虽然给出了答案,但我不知道如何应用它。根据 Tom Hawtin 的说法,我应该在基础数组中“将限制设置为当前位置,然后将位置设置为零”。我不确定如何更改这些值。(如果您能解释基本逻辑,那将对我有很大帮助:)
至于 ByteBuffer.slice,我不知道如何翻译它。
编辑:如果实际代码更清楚,我会发布它:
爪哇:
到目前为止,我在 C#.NET 中的翻译:
谢谢!
编辑:更改b.BaseStream.SetLength(b.BaseStream.Length);
为b.BaseStream.SetLength(b.BaseStream.Position);
,基于 Java 文档。
java - 如果您事先不知道要分配多少字节,如何初始化 ByteBuffer?
这是:
...初始化 a 的唯一方法ByteBuffer
?
如果我不知道需要分配多少字节怎么办..?
编辑:更多细节:
我正在将一种图像文件格式转换为 TIFF 文件。问题是起始文件格式可以是任意大小,但我需要将 TIFF 中的数据写入小端。所以我正在阅读我最终要打印到 TIFF 文件的内容,首先将其打印到 ByteBuffer 中,这样我就可以将所有内容放入 Little Endian,然后将其写入 outfile。我想既然我知道 IFD 有多长,标头有多长,而且我大概可以算出每个图像平面中有多少字节,我可以在整个过程中使用多个 ByteBuffer。
java - C++ 等效于 Java ByteBuffer?
我正在寻找 Java ByteBuffer 的 C++“等价物”。
我可能错过了明显的或者只需要一个孤立的使用示例来澄清。我浏览了 iostream 系列,看起来它可以提供一个基础。具体来说,我希望能够:
- 从字节数组/点构建缓冲区并从缓冲区中获取原语,例如 getByte、getInt
- 使用原语构建缓冲区,例如 putByte、putInt,然后获取字节数组/指针。
java - Java - ByteBuffer.remaining() 问题
摘要:我有一个 ByteBuffer,我在其中抽取一些数据。之后,我想通过 Socket 发送这些数据。
所以,我写了这样的代码:
在调用代码中,我执行以下操作。我首先得到序列化的 ByteBuffer,然后将其写入套接字......
我期望 buffer.remaining() 应该完全等于我泵入缓冲区的#bytes。但是我发现它不是,它总是等于 1024,这是缓冲区底层数组的大小。
这就是我创建缓冲区的方式...
这就是我得到的打印语句的输出......
字符串 [约翰] #bytes = 4 字符串 [史密斯] #bytes = 5
#输出缓冲区中的字节数:1024 限制 = 1024 位置 = 0 剩余 = 1024
如何获得放入缓冲区的确切#bytes?
谢谢!
java - JNA ByteBuffer statvfs
我正在尝试使用来自 java 的 statvfs 调用来获取 / 文件夹上的可用空间,
我从 c 检查了 statvfs 结构的大小,它显示 44 个字节,我使用 java.nio.ByteBuffer.allocateDirect 44 个字节分配了一个字节缓冲区,它的顺序设置为 44 个字节。当我调用 statvfs 时,我得到的返回值为 0,所以我假设调用成功,但我似乎无法使用 buffer.getInt 从 ByteBuffer 中获取信息,返回 512 f_bsize 这是正确的,但之后我无法读取.
buffer.getInt(12) 应该给我 f_blocks 但我得到 0。
还是我的逻辑有问题?
java - 增长的字节缓冲区
有没有人见过 java.nio.ByteBuffer 的实现,如果 putX() 调用超出容量,它会动态增长?
我想这样做的原因有两个:
- 我不知道我需要提前多少空间。
- 每次我用完空间时,我宁愿不做一个新的 ByteBuffer.allocate() 然后做一个批量 put() 。
java - ByteBuffer,什么是检测是否需要翻转的干净方法
是否有一种绝对可靠的方法来检测 ByteBuffer 是否需要翻转?
我有一个 ByteBuffer 用于打包和解包数据结构,也用于存储要打包/解包的字节。
但是,如果刚刚执行了写入操作或执行了读取操作,或者如果将 ByteBuffer 传递给我的代码,我无法保证缓冲区处于写入模式或读取模式,而无需手动操作位置和限制。
部分读取和写入也增加了这个问题。我一直在采用这样的约定,即缓冲区处于写入模式,并创建一个副本并翻转以用于读取目的。当将缓冲区传递给我的代码时,会手动检查并设置位置和限制,就像它们处于写入模式一样。肯定有更好的方法。