问题标签 [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.

0 投票
1 回答
9823 浏览

java - ByteBuffer.allocateDirect() 和 MappedByteBuffer.load() 之间的区别

我试图通过使用MappedByteBuffer. 从规范中我看到,当我们使用MappedByteBuffer.load()它时,它应该将数据加载到直接缓冲区中。我对此有几个问题。

我的代码片段::

  1. 上述代码的输出是 0 字节的 Direct Memory Usage(File.txt 为 1 GB)。但是,如果我取消注释该行..

    我得到 100MB 的直接内存使用量。无法理解为什么会这样,至于为什么我没有得到任何直接的内存使用(即当该行被注释掉时)

  2. 尽管上述代码的 Direct Memory Usage 为 0 B,但我确实看到进程的常驻内存(使用 unix top )增加了 1 GB。但是如果我在盒子上执行“free -m”,我看不到内存使用量有任何增加。

在这两种情况下,我都对内存的结束位置感到有些困惑。

谢谢!

0 投票
3 回答
152562 浏览

java - Java:将 String 与 ByteBuffer 相互转换以及相关问题

我正在使用 Java NIO 进行套接字连接,并且我的协议是基于文本的,因此我需要能够在将字符串写入 SocketChannel 之前将它们转换为 ByteBuffer,并将传入的 ByteBuffer 转换回字符串。目前,我正在使用以下代码:

这在大多数情况下都有效,但我质疑这是否是执行此转换的每个方向的首选(或最简单)方法,或者是否有其他方法可以尝试。即使每次转换完成时我都使用一个新的 ByteBuffer 对象,有时,并且看似随机地调用encode()decode()会引发 异常或类似情况。java.lang.IllegalStateException: Current state = FLUSHED, new state = CODING_END我需要同步这些方法吗?有更好的方法在字符串和字节缓冲区之间进行转换吗?谢谢!

0 投票
3 回答
9053 浏览

c# - 等效于 C# 中 Java 的“ByteBuffer.putType()”

我正在尝试通过从 Java 移植代码来格式化 C# 中的字节数组。在 Java 中,使用方法“buf.putInt(value);”、buf.putShort、buf.putDouble(等等)。但是我不知道如何将其移植到 C#。我已经尝试过 MemoryStream 类,但是没有方法可以将特定类型放在字节数组的末尾。

问题:C# 中 Java 的“ByteBuffer.putType(value)”等价物是什么?谢谢!

0 投票
2 回答
4023 浏览

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 文档。

0 投票
3 回答
36129 浏览

java - 如果您事先不知道要分配多少字节,如何初始化 ByteBuffer?

这是:

...初始化 a 的唯一方法ByteBuffer

如果我不知道需要分配多少字节怎么办..?

编辑:更多细节:

我正在将一种图像文件格式转换为 TIFF 文件。问题是起始文件格式可以是任意大小,但我需要将 TIFF 中的数据写入小端。所以我正在阅读我最终要打印到 TIFF 文件的内容,首先将其打印到 ByteBuffer 中,这样我就可以将所有内容放入 Little Endian,然后将其写入 outfile。我想既然我知道 IFD 有多长,标头有多长,而且我大概可以算出每个图像平面中有多少字节,我可以在整个过程中使用多个 ByteBuffer。

0 投票
6 回答
32911 浏览

java - C++ 等效于 Java ByteBuffer?

我正在寻找 Java ByteBuffer 的 C++“等价物”。

我可能错过了明显的或者只需要一个孤立的使用示例来澄清。我浏览了 iostream 系列,看起来它可以提供一个基础。具体来说,我希望能够:

  • 从字节数组/点构建缓冲区并从缓冲区中获取原语,例如 getByte、getInt
  • 使用原语构建缓冲区,例如 putByte、putInt,然后获取字节数组/指针。
0 投票
1 回答
15458 浏览

java - Java - ByteBuffer.remaining() 问题

摘要:我有一个 ByteBuffer,我在其中抽取一些数据。之后,我想通过 Socket 发送这些数据。

所以,我写了这样的代码:

在调用代码中,我执行以下操作。我首先得到序列化的 ByteBuffer,然后将其写入套接字......

我期望 buffer.remaining() 应该完全等于我泵入缓冲区的#bytes。但是我发现它不是,它总是等于 1024,这是缓冲区底层数组的大小。

这就是我创建缓冲区的方式...

这就是我得到的打印语句的输出......

字符串 [约翰] #bytes = 4 字符串 [史密斯] #bytes = 5

#输出缓冲区中的字节数:1024 限制 = 1024 位置 = 0 剩余 = 1024

如何获得放入缓冲区的确切#bytes?

谢谢!

0 投票
1 回答
663 浏览

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。

还是我的逻辑有问题?

0 投票
11 回答
47621 浏览

java - 增长的字节缓冲区

有没有人见过 java.nio.ByteBuffer 的实现,如果 putX() 调用超出容量,它会动态增长?

我想这样做的原因有两个:

  1. 我不知道我需要提前多少空间。
  2. 每次我用完空间时,我宁愿不做一个新的 ByteBuffer.allocate() 然后做一个批量 put() 。
0 投票
3 回答
1361 浏览

java - ByteBuffer,什么是检测是否需要翻转的干净方法

是否有一种绝对可靠的方法来检测 ByteBuffer 是否需要翻转?

我有一个 ByteBuffer 用于打包和解包数据结构,也用于存储要打包/解包的字节。

但是,如果刚刚执行了写入操作或执行了读取操作,或者如果将 ByteBuffer 传递给我的代码,我无法保证缓冲区处于写入模式或读取模式,而无需手动操作位置和限制。

部分读取和写入也增加了这个问题。我一直在采用这样的约定,即缓冲区处于写入模式,并创建一个副本并翻转以用于读取目的。当将缓冲区传递给我的代码时,会手动检查并设置位置和限制,就像它们处于写入模式一样。肯定有更好的方法。