相关疑难解决方法(0)

流式传输java servlet中的大型文件

我正在构建一个需要扩展的java服务器.其中一个servlet将提供存储在Amazon S3中的图像.

最近在加载时,我的虚拟机内存耗尽了,之后我添加了代码来提供图像,所以我很确定流式传输更大的servlet响应会导致我的麻烦.

我的问题是:在从数据库或其他云存储中读取时,如何编写java servlet以将大型(> 200k)响应流回浏览器,是否有任何最佳实践?

我已经考虑将文件写入本地临时驱动器,然后生成另一个线程来处理流,以便可以重用tomcat servlet线程.这似乎很重要.

任何想法将不胜感激.谢谢.

java java-io

42
推荐指数
3
解决办法
8万
查看次数

给定内存约束时,对具有大量数据的文件进行排序

要点:

  • 我们同时处理数千个平面文件.
  • 内存约束是一个主要问题.
  • 我们为每个文件进程使用线程.
  • 我们不按列排序.文件中的每一行(记录)都被视为一列.

做不到:

  • 我们不能使用unix/linux的sort命令.
  • 我们不能使用任何数据库系统,无论它们有多么轻盈.

现在,我们不能只加载集合中的所有内容并使用排序机制.它会占用所有内存,程序会出现堆错误.

在那种情况下,您如何对文件中的记录/行进行排序?

java sorting file

33
推荐指数
5
解决办法
6万
查看次数

Java中大型数据集的基于文件的合并排序

给定不适合内存的大型数据集,是否有任何库或api在Java中执行排序?实现可能类似于linux实用程序排序.

java sorting large-data

10
推荐指数
1
解决办法
5628
查看次数

排序20GB的数据

在过去,我不得不使用大文件,大约在0.1-3GB范围内.并非所有"列"都需要,因此可以将剩余数据放入RAM中.现在我必须处理1-20GB范围内的文件,它们可能会随着时间的推移而增长.这完全不同,因为您无法再将数据放入RAM中.

我的文件包含数百万个"条目"(我找到了一个有30个条目的条目).入口包含大约10个"列":一个字符串(50-1000个unicode字符)和几个数字.我必须按"列"对数据进行排序并显示它.对于用户,只有顶部条目(1-30%)是相关的,其余的是低质量数据.

所以,我需要一些关于朝哪个方向发展的建议.我绝对不希望将数据放入数据库中,因为它们很难为非计算机精通人员安装和配置.我喜欢提供一个单一的程序.

显示数据并不困难.但排序......无需在RAM中加载数据,在常规PC(2-6GB RAM)上......将会耗费一些时间.


我看了一下MMF(内存映射文件),但丹尼索普的这篇文章表明它可能不合适:http://dannythorpe.com/2004/03/19/the-hidden-costs-of-memory-映射出的文件/

所以,我在考虑只加载必须在ram中排序的列中的数据和指向'entry'的地址(到磁盘文件中)的指针.我对"列"进行排序,然后使用指针找到与每个列单元格对应的条目并恢复该条目."恢复"将直接写入磁盘,因此不需要额外的RAM.

PS:我正在寻找一种适用于Lazarus和Delphi的解决方案,因为Lazarus(实际上是FPC)对Mac有64位支持.64位表示可用RAM更多=排序更快.

delphi lazarus delphi-xe

8
推荐指数
2
解决办法
1419
查看次数

OutOfMemoryError:尝试读取大文件时的Java堆空间

我正在尝试读取大文件(大约516mb),它有18行文本.我试图自己写下代码,并在尝试读取文件时在第一行代码中出错:

 try(BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
        String line;
        while ((line = br.readLine()) != null) {
            String fileContent = line;
        }
 }
Run Code Online (Sandbox Code Playgroud)

注意:文件存在且大小约为516mb.如果有另一种更安全,更快捷的阅读方法,请告诉我(即使它会换行). 编辑: 这里我尝试使用扫描仪,但它持续时间更长,然后给出相同的错误

try(BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
    Scanner scanner = new Scanner(br);
    while(scanner.hasNext()){
        int index = Integer.parseInt(scanner.next());
        // and here do something with index
    }
}
Run Code Online (Sandbox Code Playgroud)

我甚至将文件分成1800行,但没有修复

java string algorithm file

7
推荐指数
1
解决办法
8478
查看次数

如何使用Java对文本文件中的记录进行排序?

对txt文件中的数据进行了一些修改.我已经尝试了建议的代码,但我没有成功地用这种格式在txt文件中再次写它.我尝试了collection.sort但是它用长线写了数据.

我的txt文件包含以下数据:

Monday
Jessica  Run      20mins
Alba     Walk     20mins
Amy      Jogging  40mins
Bobby    Run      10mins
Tuesday
Mess     Run      20mins
Alba     Walk     20mins
Christy  Jogging  40mins
Bobby    Run      10mins
Run Code Online (Sandbox Code Playgroud)

如何按升序对这些数据进行排序,并在排序后将其再次存储在txt文件中?

Monday
Alba     Walk     20mins
Amy      Jogging  40mins
Bobby    Run      10mins
Jessica  Run      20mins
Tuesday
Alba     Walk     20mins
Bobby    Run      10 mins
Christy  Jogging  40mins
Mess     Run      20mins
Jessica  Run      20mins
Run Code Online (Sandbox Code Playgroud)

java sorting file text-files

5
推荐指数
4
解决办法
7万
查看次数

如何排序N个文件

以下是这个答案 - >

如何排序非常大的文件

我只需要Merge在磁盘上已经排序的N个文件上的函数,我想将它们排序成一个大文件我的限制是内存不多于K lines in the memory (K < N)我无法获取所有它们然后排序,首选java

到目前为止,我尝试下面的代码,但我需要一个很好的方法来逐行迭代所有N个文件(不超过内存中的K LINES)+存储到磁盘的已排序的最终文件

       public void run() {
            try {
                System.out.println(file1 + " Started Merging " + file2 );
                FileReader fileReader1 = new FileReader(file1);
                FileReader fileReader2 = new FileReader(file2);

                //......TODO with N ?? ......

                FileWriter writer = new FileWriter(file3);
                BufferedReader bufferedReader1 = new BufferedReader(fileReader1);
                BufferedReader bufferedReader2 = new BufferedReader(fileReader2);
                String line1 = bufferedReader1.readLine();
                String line2 = bufferedReader2.readLine();
                //Merge 2 files based on which string is greater. …
Run Code Online (Sandbox Code Playgroud)

java algorithm

3
推荐指数
1
解决办法
108
查看次数

如何在Java中的8GB平面文件中的无序列表中查找名称

好吧,所以我们有这个问题,我知道我可以使用InputStream来读取流而不是读取整个文件,因为这会导致内存问题.

参考这个答案:https://stackoverflow.com/a/14037510/1316967

然而,关注的是速度,在这种情况下,我会读取整个文件的每一行.考虑到这个文件包含数百万个无序的名称,这个操作必须在几秒钟内完成,我该如何解决这个问题.

java io performance

0
推荐指数
1
解决办法
79
查看次数