问题标签 [mappedbytebuffer]

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 投票
2 回答
315 浏览

java - Java Mapped Byte Buffer - 缓冲区中的垃圾值

我正在尝试使用映射字节缓冲区(Java),我必须在文件上使用 DirectBuffer 来执行一些算术运算:

问题: - 直接缓冲区是否被归零填充?我有一个调试方法将值转储为

有趣的是,当我在写入任何值之前进行转储时,它会转储所有零(双打):

当我写信给任何地方时说:

当我重新运行转储时,它会转储一些随机值:

我的逻辑取决于零值

在编写上述任何条件之前,如何确保将值正确初始化为零?有没有人有类似的问题?解决这种情况的最佳方法是什么?

任何见解都受到高度赞赏。

更多细节:操作系统:Windows 10 JDK:java 版本“1.8.0_111”

提前致谢!

0 投票
0 回答
445 浏览

java - TFLite Android:模型文件不会加载。startOffset 和 declaredLength 问题

我在使用 Tensorflow-for-poets-2 TFLite 教程中的 MappedByteBuffer 方法加载 TFLite 模型时遇到问题。

特别是当返回 fileChannel.map 时,我使用 tflite_convert(以前的 toco)工具转换的模型会失败。该模型是浮点 TFLite 模式。

该问题似乎是由 startOffset 和 declaredLength 变量引起的。我在 logcat 中收到的错误是

如果我将这些值修复为成功加载的模型中的值,则该方法成功返回 fileChannel.map。我的模型中的值是 startOffset = 2846788 declaredLength = 45525464

我知道我的 TFlite 模型可以成功映射到内存,因为 tensorflow/contrib/lite/tools/benchmark:benchmark_model 能够对其进行基准测试。

我会尝试加载量化的 TFLite 模型,但目前我的模型包含没有量化等价物(transpose_conv)的操作。

这可能是什么原因造成的?

我的 .tflite 模型可以在这里找到:https ://github.com/andrewginns/CycleGAN-Tensorflow-PyTorch/releases/download/tf1.7-py3.6.4/float.tflite

0 投票
0 回答
70 浏览

java - 如何从 ByteArrayInputStream 创建 MappedByteBuffer?

我有一个 API,它以 ByteArrayInputStream 的形式返回内容,基本上是视频内容。现在对于流式传输,它看起来 MappedByteBuffer 似乎最合适。那么如何将这个 ByteArrayInputStream 转换为 MappedByteBuffer 的一个实例呢?

0 投票
3 回答
5852 浏览

java - 在 Tensorflow-lite Android 中将位图转换为 ByteBuffer(浮点数)

在用于图像分类的 tensorflow-lite android 演示代码中,首先将图像转换为 ByteBuffer 格式以获得更好的性能。这种从位图到浮点格式的转换以及随后到字节缓冲区的转换似乎是一项昂贵的操作(循环、位运算符、 float mem-copy 等)。我们试图用 opencv 实现相同的逻辑以获得一些速度优势。以下代码可以正常工作;但由于此转换中的一些逻辑错误,模型的输出(此数据被输入)似乎不正确。模型的输入应该是数据类型为浮点 [1,197,197,3] 的 RGB。

我们如何使用opencv(或任何其他方式)加快位图到字节缓冲区转换的过程?

标准位图到字节缓冲区的转换:-

OpenCV 位图到 ByteBuffer :-

0 投票
0 回答
180 浏览

java - MappedByteBuffer 如何进行垃圾收集?

从 Java 文档中,

直接缓冲区的内容可能位于正常的垃圾收集堆之外,因此它们对应用程序内存占用的影响可能并不明显

同样来自 Java 文档,

MappedByteBuffer:直接字节缓冲区,其内容是文件的内存映射区域。

映射的字节缓冲区和它所代表的文件映射在缓冲区本身被垃圾收集之前保持有效。

我相信堆外内存分配不能被 GC 垃圾收集。在这种情况下,这些语句让我对 a 的内存管理感到好奇MappedByteBuffer。如果直接ByteBuffer支持 aMappedByteBuffer位于正常堆之外会发生什么?

0 投票
1 回答
1327 浏览

java - 如何使用 MappedByteBuffer 从 java 中的映射文件中逐行读取

我想以非常快速的方式读取一个大文件。我是这样使用MappedByteBuffer的:

这无法正常工作。它正在更改文件的内容并打印更改的内容。有没有更好的方法来使用 MappedByteBuffer 读取文件的一行?

最终我想拆分行并提取某些内容(因为它的 csv)所以这只是一个重现问题的最小示例。

0 投票
0 回答
113 浏览

java - 如果必须将内存复制到稍后操作的基元,则 java 中的文件内存映射是无用的

我正在使用 MappedByteBuffer 将我写入的文件加载到内存中。这应该是加载文件的一种快速方法。我的文件包含一堆ints 和doubles。网上有很多教程向您展示如何编写然后读取文件。这是我的测试:

这一切都很好,但是这些教程的问题是它们只是将文件的内容打印到控制台。但是,如果我想使用文件的值进行更多计算,稍后,我需要将它们存储到一些变量(或数组)中,本质上是制作它们的新副本,这违背了内存映射文件的目的。

唯一的其他解决方法是按需调用out.position(),但我需要知道我想要使用的期望值在哪个位置,我认为如果我不按顺序遍历它们是不可能知道的。

在 c/c++ 中,您可以创建一个 int 变量,该变量将指向内存映射的 int,因此您不会复制该值,但在 Java 中,这是不可能的。

所以本质上我想以随机访问而不是顺序访问内存映射文件。

这可能是在 java 中使用 MemoryMappedFiles 的一个缺点吗?

0 投票
0 回答
18 浏览

java - 自我管理的内存映射字节缓冲区

我的应用程序必须缓冲短暂但相当大的数据数组。并且内存中可能同时存在许多大数组。

我通过业务逻辑携带文件不好。我必须管理这些文件并照顾好IOExceptions每一次。我尝试申请MappedByteBuffer,但它仍然需要手动管理文件,尤其是删除使用过的临时文件,因为操作系统不保证/tmp在我申请后清理文件夹。

是否有任何盒式解决方案提供类似堆的磁盘空间分配和类似 GC 的未使用文件擦除?

与 MapDB 类似,但用于字节缓冲区

0 投票
2 回答
884 浏览

java - mappingsize 或 limit 如何影响 MappedByteBuffer 的性能?

我正在处理大文件,并且正在使用 MappedByteBuffer 进行读写操作。我有点缺乏知识,所以我想知道一些事情。

MappedByteBuffer buf = raf.getChannel().map(FileChannel.MapMode.READ_WRITE, offset, size);

  1. 我知道 ByteBuffer 的大小限制是 Integer.MAX_VALUE 那么我应该如何设置 MappedByteBuffer 的大小?我应该使用小块还是 Integer.MAX_VALUE?

    那么如果我增加我的映射大小,我的应用程序读写性能也会提高吗?

  2. 当这个大小增加时,我的内存使用量是否也在增加?我想知道这是因为我正在创建多个文件来读写。所以也许如果一个文件分配 2gb 的内存,如果我有 6 个文件,我需要 12gb 的内存,或者我的想法完全错误。

  3. 它与 JVM -Xmx 或我的物理内存有关吗?

这是我的用法:

0 投票
1 回答
132 浏览

java - 无法使用 MappedByteBuffer 读取块中的文件

在读取操作期间,我得到 java.io.IOException: Channel not open for writing - cannot extend file to required size

我编写了一个简单的程序,用 MappedByteBuffer 读取文件。这个想法是根据 API 读取带有区域的文件。但是在执行过程中我得到了异常。我有包含以下内容的测试文件:

简单测试文件!

输出: