问题标签 [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.
java - MappedByteBuffer 到位图?
我有一个 MappedByteBuffer,其中一部分包含 PNG 文件的字节。
我想调用:BitmapFactory.decodeByteArray(byte[] data, int offset, int length);
我是否必须将 MappedByteBuffer 的部分移动到 byte[] 中,或者有什么方法可以传递 MappedByteBuffer?
谢谢!
java - 64 位 Windows 上的 32 位 JVM 最大内存大小没有预期的那么大
我一直在艰难地映射一个 550MB 的文件。我了解 32 位 JVM 最多可以分配 1.4G 左右的内存大小,所以我需要分部分映射一个大文件。但是,这是一个 550MB 的文件,但我仍然无法将其全部映射到内存中。我能做的最好的事情是缓冲区大小约为 333MB。
下面是我的测试代码:
错误如下:
Exception in thread "main" java.io.IOException: Map failed
at sun.nio.ch.FileChannelImpl.map(Unknown Source)
at TestSpliter.testMap(TestSpliter.java:22)
at TestSpliter.main(TestSpliter.java:14)
Caused by: java.lang.OutOfMemoryError: Map failed
...
JVM参数:-Xms1024m
谁能解释为什么我只能使用 1.4GB 中的 300MB?谢谢。
请注意,这不是与那些询问 32 位 JVM 的最大堆大小的问题重复的问题。
java - 逐块(字节)比较文件java
我尝试逐块比较两个文件。如果块相等 - 获取下一个块并比较它们。如果最终块相等 - 返回 true;所有其他变体 - 返回 false。我不明白如何正确处理下一个块以及如何获得文件结尾。
java - 在文件作为 RandomAccessFile 打开并映射为 MappedByteBuffer 后重命名文件
我正在尝试重命名之前用作 RandomAccessFile 的文件。
当我尝试重命名文件时,我在 renameTo 调用时收到错误消息。当我使用 Windows 应用程序进程监视器时,我看到没有重命名调用。
我怎么可能无法重命名作为 RandomAccessFile 打开的文件?
以下代码将复制我遇到的问题:
java - 内存不足错误:Java 堆空间
我正在尝试使用映射字节缓冲区读取文件,并在buffer.position(position);行获得OutOfMemoryError:JavaHeapSpace ; ..我不明白代码有什么问题..错误的原因可能是什么?
java - java内存映射文件多线程读/写
我有 2 个线程同时访问同一个大文件(.txt)。
第一个线程正在从文件中读取。第二个线程正在写入文件。
两个线程都访问同一个块,例如(start:0,blocksize:10),但具有不同的通道和缓冲区实例
读者:
作家:
我知道如果两者同时开始,我会得到重叠异常!但是我想知道的是,重叠到底发生在什么时候?我的意思是什么时候发生“锁定”?示例:假设作者首先获得访问权限,然后如果读者尝试访问,那么在什么时候有可能?:
1、2、3 还是 4?
没有4是肯定的,因为通道被关闭了!其他点呢?
谢谢!
java - 具有多个文件的 MappedByteBuffer
谈到Java NIO MappedByteBuffer,是否可以将不同文件的一部分映射到缓冲区中?像这样的东西:
然后是这样的:
目前,发生的情况是在第一个“放置”中,缓冲区的限制已经设置为某个值。第二次“放入”缓冲区会导致缓冲区溢出异常。我已经为缓冲区分配了足够的空间。
我将如何使用第二个文件中的值更新(即附加)这个缓冲区?
编辑:我最初的问题是不正确的。编辑它,使其更有意义。
我有一些大文件(比如 4 个,现在大小相等),这些文件,即使是单独的,也不适合内存。我必须对 4 个文件执行操作并创建一个输出文件。由于与文件的大小相比,我的内存非常小,我一次只能处理 4 个块,即一次从每个文件中处理一个块。我可以创建多个 MemoryByteBuffers 映射到文件中的特定块,然后写入 ByteBuffer 进行处理,或者我可以直接将每个块写入 ByteBuffer。
在这种情况下使用 MemoryByteBuffer 有什么优势/意义吗?
java - 用 Java 编写和读取 MappedByteBuffer
我正在学习 java 中的内存映射文件。我想知道如何写入/读取 MappedByteBuffer。
这是我用于写入 MappedByteBuffer 的代码。
尝试执行此操作时出现 BufferOverflow 异常。
在写入时达到限制后如何增加 MappedByteBuffer 的大小,如果我不知道我将提前写入文件的内容的大小?
为了阅读,让我们以这种情况为例,我创建一个具有初始缓冲区大小的 MappedByteBuffer,如果达到该初始大小的末尾,我如何映射文件的不同部分
更一般地说,我有一个文件,从文件的一部分到另一部分的字节偏移量,当我在点 (x) 读取偏移量 (y) 时,我想从 (x) 跳转到 (y)。我该怎么做?
提前感谢您帮助我。
java - 为什么这个“行数”程序在 Java 中很慢?使用 MappedByteBuffer
为了尝试MappedByteBuffer
(Java 中的内存映射文件),我编写了一个简单的wc -l
(文本文件行数)演示:
我在一个大约 15 MB(15008641 字节)和 100k 行的文件上尝试了这个。在我的笔记本电脑上,大约需要13.8 sec
. 为什么这么慢?
完整的课程代码在这里: http: //pastebin.com/t8PLRGMa
作为参考,我在 C 中写了同样的想法:http: //pastebin.com/hXnDvZm6
它运行大约 28 毫秒,或490 times faster
.
出于好奇,我还使用与 Java 中基本相同的算法和 API 编写了一个 Scala 版本。它运行10 times faster
,这表明肯定发生了一些奇怪的事情。
更新:该文件由操作系统缓存,因此不涉及磁盘加载时间。
我想使用内存映射来随机访问可能不适合 RAM 的更大文件。这就是为什么我不只是使用 BufferedReader。
java - 当您不断更改地图大小时,Java MappedByteBuffer 性能越来越差
最近我做了一些关于 Java MappedByteBuffer 的测试。我发现,如果我不断地映射同一个文件并阅读它,阅读所花费的时间会越来越长。但是如果我不改变地图大小,它会比我在地图大小变化测试中使用相同的地图大小更快。
我有一个 1GB 的文件“dataFile”,里面充满了整数。
还有一种阅读方法
变化 buffSize 测试
变化输出:
固定的 buffSize 测试:
输出
正如 2 次测试所示,使用相同 buffSize(1024MB) 进行读取所花费的时间在 2 次测试中完全不同。固定 buffSize 的测试比变化测试快得多。
我的问题是:1.这是怎么发生的,为什么会更快?2、MappedByteBuffer是否占用物理内存?正如我在 ActivityMonitor 中看到的,它不会占用物理内存。
谢谢
- - - 更新 - - -
释放缓冲区代码:
我不认为这个问题的原因是内存使用。因为即使我打开发布代码和gc代码它也有相同的输出。无论如何,如果是关于内存使用情况,我在第二次测试中将循环次数设置为 100,它应该比第一次测试使用更多的内存,但它比第一次更快。
----- 更新 2 -----
如果我在测试 1 中将 buffSize 减少而不是增加,问题就会消失。
输出: