小编mar*_*ssi的帖子

缓冲的RandomAccessFile java

RandomAccessFile对于随机访问文件非常慢.您经常阅读有关在其上实现缓冲层的信息,但是无法在线查找代码.

所以我的问题是:你们谁知道这个类的任何开源实现共享指针或共享你自己的实现?

如果这个问题会成为关于这个问题的有用链接和代码的集合,我很确定,很多人都会共享这个问题并且SUN从来没有正确解决这个问题.

请不要引用MemoryMapping,因为文件可能比Integer.MAX_VALUE大.

java io file-io buffering random-access

19
推荐指数
2
解决办法
2万
查看次数

用于字节数组的Java Comparator(字典)

我有一个带有byte []键的hashmap.我想通过TreeMap对其进行排序.

为字典顺序执行比较器的最有效方法是什么?

java sorting collections compare map

14
推荐指数
2
解决办法
1万
查看次数

使用Java映射大于2GB的文件

通常可以说:如何byte[] get(offset, length)为Java中大于2GB的内存映射文件实现一种方法.

有了上下文:

我正在尝试使用随机i/o高效读取大于2GB的文件.当然,这个想法是使用Java nio和内存映射API.

问题是内存映射限制为2GB.其中一个解决方案是映射多个2GB的页面并通过偏移量进行索引.

这里有一个类似的解决方案:

在Java中的已排序(内存映射?)文件中进行二进制搜索

这个解决方案的问题在于它设计为在我的API应该读取时读取字节byte[](因此我的API就像这样read(offset, length)).

是否只是努力将这种终极get()变为get(offset, length)?当byte[]我在阅读两页之间时会发生什么?

java io performance nio memory-mapping

11
推荐指数
1
解决办法
4085
查看次数

Java:调用Runtime.freeMemory(),Runtime.totalMemory()和Runtime.maxMemory()的代价

我有一个Map内存存储我的对象.当我内存不足时,我想要记忆.我现在正在这样做:

void add(K key, V value) {
    if (underPressure()) {
        flush(innerMap);
    }
    innerMap.add(k, v);
}

boolean underPressure() {
    Runtime rt = Runtime.getRuntime();
    long maxMemory = rt.maxMemory();
    long freeMemory = rt.freeMemory();

    return (double) freeMemory / maxMemory < threshold;
}
Run Code Online (Sandbox Code Playgroud)

正如underPressure()每个插页所称,它有多贵?根据我的理解,因为它是一个近似值,它应该以某种方式被jvm 缓存,但是有没有人真正了解这个?

java memory performance garbage-collection jvm

9
推荐指数
2
解决办法
1775
查看次数

使用matplotlib绘制eigenbehaviours

我正在尝试使用matplotlib绘制eigenbehaviors,基本上我有一个2D矩阵,并希望用与热图非常相似的东西绘制它,但是细胞是分开的并且可以识别.参见例如:

http://www.cl.cam.ac.uk/~nv240/pics/eigenbehaviour.jpg

python plot matplotlib

6
推荐指数
1
解决办法
675
查看次数

HashMap:以随机顺序迭代键值对

我有一个HashMap,每当我得到迭代器时,我想以不同的随机顺序迭代它们的键值对.从概念上讲,我想在调用迭代器之前"洗牌"地图(或者如果你想要,"洗牌"迭代器).

我有两种选择:

1)使用LinkedHashMap的方法并在内部保留一个条目列表,将其随地移动并在调用迭代器时返回该视图.
2)取map.entrySet(),构造一个ArrayList并在其上使用shuffle().

虽然这两种方法看起来很像我,但我期待非常大的HashMaps,所以我真的很关心细节和内部,因为我真的不能浪费内存或计算.

java random iterator hashmap data-structures

6
推荐指数
1
解决办法
3993
查看次数

Java:创建一个由bytearray支持的FileChannel

我有一个IO类,它使用ByteBuffer缓冲对FileChannel的访问(因此它基本上接受构造函数中的FileChannel).我想对它进行单元测试,所以如果我能得到一个支持bytearray的FileChannel以避免在测试期间创建和删除文件,那就太好了.

为了给你一个想法,如果我能得到像ByteArrayOutputStream.getChannel()这样的东西,那将是完美的.

java testing io file-io nio

5
推荐指数
1
解决办法
1799
查看次数

Java泛型类型参数隐藏

我正在定义一个类:

class Foo<I extends Bar & Comparable<I>> {
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨I被隐藏I.我想第二次I出现在定义中是隐藏在第一个范围内,好像变量I可以分配给两种不同的类型.怎么做正确?

编辑:

这是一个内在阶级.完整的代码可以是:

class Baz<I> {
    class Foo<I extends Bar & Comparable<I>> {
    }
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,如果我重新提名内IJ,我不知道这IJ实际上是同一类型.

java generics warnings

5
推荐指数
1
解决办法
6434
查看次数

具有停止条件的Java生产者 - 消费者

我有N个工作人员共享要计算的元素队列.在每次迭代中,每个工作程序从队列中删除一个元素,并且可以生成更多要计算的元素,这些元素将被放在同一个队列中.基本上,每个生产者也是消费者.当队列中没有元素并且所有工作者已经完成计算当前元素时,计算结束(因此不能再生成要计算的元素).我想避免调度员/协调员,所以工人应该协调.允许工人查明暂停条件是否有效的最佳模式是什么,因此代表其他人停止计算?

例如,如果所有线程都只执行此循环,那么当所有元素都被计算出来时,它将导致所有线程被永久阻塞:

while (true) {
    element = queue.poll();
    newElements[] = compute(element);
    if (newElements.length > 0) {
        queue.addAll(newElements);
    }
}
Run Code Online (Sandbox Code Playgroud)

java concurrency producer-consumer

5
推荐指数
1
解决办法
688
查看次数

python:检索字典或集合中的天花板键和楼层键

我有一串带整数键的字典.对于我没有的密钥,我希望能够在它想要检索的密钥之前和之后检索最小和最大的密钥,但这不存在.
java中的Treemap类有两个方法正是这样做的:ceilingkey()floorkey().

我怎么能用python做到这一点?

作为一个例子,我有一个这样的字典:

 { 1: "1", 4: "4", 6: "6" ..., 100: "100" } 
Run Code Online (Sandbox Code Playgroud)

如果我要求钥匙1,我会检索"1",但如果我找钥匙3,我应该得到KeyError,因此能够得到floor(3) = 1ceil(3) = 4.

python tree dictionary map

5
推荐指数
2
解决办法
1456
查看次数

如何在 nopython 模式下将 float numpy 数组值转换为 numba jitted 函数内的 int

在 numba jitted nopython 函数中,我需要用另一个数组中的值索引一个数组。两个数组都是 numpy 数组浮点数。

例如

@numba.jit("void(f8[:], f8[:], f8[:])", nopython=True)
def need_a_cast(sources, indices, destinations):
    for i in range(indices.size):
        destinations[i] = sources[indices[i]]
Run Code Online (Sandbox Code Playgroud)

我的代码是不同的,但让我们假设这个问题可以通过这个愚蠢的例子重现(即,我不能有 int 类型的索引)。AFAIK,我不能在 nopython jit 函数内部使用 int(indices[i]) 或 indices[i].astype("int") 。

我该怎么做呢?

python numpy numba

5
推荐指数
1
解决办法
1994
查看次数

Java MemoryMapping大文件

MappedByteBuffer对2GIG的Java限制使得用于映射大文件变得棘手.通常推荐的方法是使用MappedByteBuffer数组并通过以下方式对其进行索引:

long PAGE_SIZE = Integer.MAX_VALUE;
MappedByteBuffer[] buffers;

private int getPage(long offset) {
    return (int) (offset / PAGE_SIZE)
}

private int getIndex(long offset) {
    return (int) (offset % PAGE_SIZE);
}

public byte get(long offset) {
    return buffers[getPage(offset)].get(getIndex(offset));
}
Run Code Online (Sandbox Code Playgroud)

这可能适用于单个字节,但如果要处理更大且需要跨越边界的读/写(getLong()或get(byte [])),则需要重写大量代码.

问题是:对于这些场景,你最好的做法是什么,你知道任何可以在不重新发明轮子的情况下重复使用的工作解决方案/代码吗?

java file-io memory-management nio memory-mapped-files

4
推荐指数
1
解决办法
3570
查看次数