小编lar*_*ars的帖子

Java InputStream是否有助于或损害大文件的内存使用?

我在StackOverflow上看到一些彼此矛盾的帖子,我想得到一个明确的答案。

我开始假设使用Java InputStream将允许我从文件中流式传输字节,从而节省内存,因为我不必一次消耗整个文件。这正是我在这里阅读的内容:

将所有字节加载到内存不是一个好习惯。考虑返回文件并打开输入流以读取它,因此在处理大文件时应用程序不会崩溃。–安德鲁兹

将文件下载到流而不是文件

但是后来我使用InputStream读取了一个非常大的Microsoft Excel文件(使用Apache POI库),然后遇到了这个错误:

使用POI读取Excel文件(xlsx)时出现java.lang.outofmemory异常

我收到一个OutOfMemory错误。

这些至关重要的建议为我节省了:

一开始会有所不同的事情是打开文件时。如果您有文件,则将其传递!使用InputStream需要将所有内容缓冲到内存中,这会占用空间。由于您不需要进行缓冲,所以不用!

我摆脱了InputStream,只使用了裸露的java.io.File,然后OutOfMemory错误消失了。

因此,就内存使用而言,使用java.io.File比InputSteam更好?那没有任何意义。

真正的答案是什么?

java out-of-memory

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

使用Big O表示法,此算法的正确标签是什么?

我很好奇使用Big O Notation描述这个的官方方式是什么?

var prices = [100, 180, 260, 590, 40, 310, 535, 10, 5, 3];
var biggest_profit = 0;

for (var i=0; i < prices.length; i++) {
    var first_price = prices[i];

    for (var j=i+1; j <= prices.length; j++) {
      // do something here
    }
}
Run Code Online (Sandbox Code Playgroud)

这有点让我失望:

j=i+1
Run Code Online (Sandbox Code Playgroud)

每次我们经历i,j变得越来越短.

Big O Notation中此模式的正确名称是什么?

algorithm big-o time-complexity

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

标签 统计

algorithm ×1

big-o ×1

java ×1

out-of-memory ×1

time-complexity ×1