- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Clojure 的新手,我需要 Clojure 为我做一个简单的任务,相当于下面的 Java 代码:
MappedByteBuffer out = new RandomAccessFile("file", "rw").getChannel().map(FileChannel.MapMode.READ_WRITE, 0, 100);
然而 Clojure 是一种动态语言,map() 返回 DirectByteBuffer 而不是 MappedByteBuffer。我希望使用 setInt() 方法,它是 MappedByteBuffer 的成员。有没有办法告诉 Clojure 使用 MappedByteBuffer 中的方法而不是 DirectByteBuffer?
谢谢!
顺便说一句,这是我的尝试:
(defprotocol MfileP
(at [this pos])
(get-i [this])
(set-i [this val])
(resize [this size])
(fsize [this]))
(defrecord Mfile [fc buf] MfileP
(at [this pos] (.position buf pos))
(get-i [this] (.getInt buf))
(set-i [this val] (.setInt buf val))
(resize [this size] (assoc this :buf (.map fc FileChannel$MapMode/READ_WRITE 0 size)))
(fsize [this] (.size fc)))
(defn open [path]
(let [fc (.getChannel (new RandomAccessFile path "rw"))]
(let [buf (.map fc FileChannel$MapMode/READ_WRITE 0 (.size fc))]
(Mfile. fc buf))))
形式 (set-i) 抛出异常,因为 Clojure 正在 DirectMapBuffer 中寻找 .setInt。
最佳答案
您没有说明您认为您如何确定 map()
正在返回 DirectByteBuffer
。它不是 - 毫无疑问,它返回抽象类 MappedByteBuffer
的子类。
根据 JDK 文档,没有方法 MappedByteBuffer#setInt(int)
。
您应该为界面编写代码。
参见:
关于java - Clojure - 如何将 DirectByteBuffer(由 getChannel.map 返回)转换为 MappedByteBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10371721/
我计划使用 DirectByteBuffers 来连接用 C++ 编写的第三方库。 我很担心the hadoop docs说: DirectByteBuffers are garbage collec
绝大多数 DirectByteBuffer - 如果足够大 - 是在 Java 堆之外分配的。但是它的一部分仍然会在堆上,即使它很小。 任意大小的 DirectByteBuffer 在堆上占用多少字节
我的代码是: if (frameRGBABuffer == null) { frameRGBABuffer = ByteBuffer.allocateDirect(cameraHeight *
我知道当一个 directbytebuffer 被分配时,它不受垃圾收集的影响,但我想知道的是 wrapping 对象是否被垃圾收集。 例如,如果我分配了一个新的 DirectByteBuffer d
我知道一种方法 - 在 C++ 端使用 memcpy: C++ 方法: void CopyData(void* buffer, int size) { memcpy(buffer, sourc
我在 DirectByteBuffer.java 中找到了这段代码: private long ix(int i) { return address + (i << 0); } 有什么特殊用途
出于某种原因,我必须使用目前无法从 JVM 直接访问的特定于 Linux 的 API,并且需要设计一个接受 ByteBuffer 的方法(这绝对不是因为某些性能原因)。这是它的样子: //I need
好吧,这让我的小心思感到困惑。 我从对 GetObjectField() 的两次调用之一中得到了 null 返回。每个对象都是一个 DirectByteBuffer。该调用不会因找不到字段而引发异常,
我想在 DirectByteBuffer 中存储一个散列映射(最多 1,000,000,000 个条目),我需要向其中读取和写入条目。 HashMap 将有一个字符串键和可序列化的对象。但是如果将 H
我有一个 Java 项目,它通过 COM 使用一个 dll 库。我有 Windows 7,并且使用 32 位 Java 1.6。我使用 2012/04/26 发布的 com4j 作为桥梁。它有效。 问
我正在使用 async-profiler 和 perf,并决定测量 DirectByteBuffer 的内核 Activity 磁盘输入输出。这是代码(用 Scala 编写,但它的 Java 版本应该
我想做什么 我需要使用直接内存来避免 GC 移动东西。我想为那些启用大页面。 到目前为止 标志 -XX:+UseLargePages 在使用堆缓冲区(非直接字节缓冲区)时工作正常,但在使用 Direc
我是 Clojure 的新手,我需要 Clojure 为我做一个简单的任务,相当于下面的 Java 代码: MappedByteBuffer out = new RandomAccessFile("f
得到了一个仍然支持 Java 6 的项目。下面的代码位于一个 jar 文件中,该文件使用 Compiler compliance level 1.6 该 jar 文件应该从为 java 6 或更新版本
我是一名优秀的程序员,十分优秀!