本文目录一览:
- 1、Java中如何高效的读取大文件
- 2、java大文件上传后如何判断什么时候下载
- 3、java 对大文件怎么加密
- 4、解决java读取大文件内存溢出问题,如何在不
- 5、Java 批量大文件上传下载如何实现?
Java中如何高效的读取大文件
读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法:
Files.readLines(new File(path), Charsets.UTF_8); FileUtils.readLines(new File(path));
这种方法带来的问题是文件的所有行都被存放在内存中,当文件足够大时很快就会导致程序抛出OutOfMemoryError 异常。
java大文件上传后如何判断什么时候下载
1、通过HTTP协议头中的Content-Length字段可以知道文件的大小,可以判断上传的文件是否完整。
2、通过应用层协议,服务端会返回接收文件的状态,客户端可以根据状态判断文件是否完整上传成功。
java 对大文件怎么加密
选择一个加密算法
输入为bufferIn,输出为bufferOut
循环读取文件,读满缓冲区就调用加密算法,然后输出至目标文件
不可能一次性将几兆的文件一次性进行加密的
解决java读取大文件内存溢出问题,如何在不
1、传统的在内存中读取
读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法:
这种方法带来的问题是文件的所有行都被存放在内存中,当文件足够大时很快就会导致程序抛出OutOfMemoryError 异常。
例如:读取一个大约1G的文件:
这种方式开始时只占用很少的内存:(大约消耗了0Mb内存)
然而,当文件全部读到内存中后,我们最后可以看到(大约消耗了2GB内存):
这意味这一过程大约耗费了2.1GB的内存——原因很简单:现在文件的所有行都被存储在内存中。
把文件所有的内容都放在内存中很快会耗尽可用内存——不论实际可用内存有多大,这点是显而易见的。
此外,我们通常不需要把文件的所有行一次性地放入内存中——相反,我们只需要遍历文件的每一行,然后做相应的处理,处理完之后把它扔掉。所以,这正是我们将要做的——通过行迭代,而不是把所有行都放在内存中。
2、文件流
现在让我们看下这种解决方案——我们将使用Java.util.Scanner类扫描文件的内容,一行一行连续地读取:
这种方案将会遍历文件中的所有行——允许对每一行进行处理,而不保持对它的引用。总之没有把它们存放在内存中:(大约消耗了150MB内存)
3、Apache Commons IO流
同样也可以使用Commons IO库实现,利用该库提供的自定义LineIterator:
由于整个文件不是全部存放在内存中,这也就导致相当保守的内存消耗:(大约消耗了150MB内存)
4、结论
这篇短文介绍了如何在不重复读取与不耗尽内存的情况下处理大文件——这为大文件的处理提供了一个有用的解决办法。
Java 批量大文件上传下载如何实现?
解决这种大文件上传不太可能用web上传的方式,只有自己开发插件或是当门客户端上传,或者用现有的ftp等。
1)开发一个web插件。用于上传文件。
2)开发一个FTP工具,不用web上传。
3)用现有的FTP工具。
下面是几款不错的插件,你可以试试:
1)Jquery的uploadify插件。具体使用。你可以看帮助文档。