【发布时间】:2021-03-13 13:01:42
【问题描述】:
我必须创建一个方法,我需要将文件分块成多个字节。
examples byte[] into List
所以 5.2 MB 文件应该是五个 1MB 和一个 2KB 的列表。 [2kb、1MB、1MB、1MB、1MB、1MB]。
byte[] mainFile=getFIle();
List<bute[]> listofSplitBytes=getFileChunks(mainFile);
public void list<bute[]> getFileChunks(byte[] mainFile) {
int sizeMB = 1 * 1024 * 1024;
// Split the files logic
}
我试图避免添加 if then else 来处理 .我正在尝试查找是否有更清洁的方法,例如使用流或类似的东西?
【问题讨论】:
-
这篇文章可能对你有所帮助:stackoverflow.com/questions/39399398/…
-
对于大文件,这将对程序的内存使用造成严重破坏。想象一下读取一个 500 MB 的文件并在 RAM 中有两个副本。更好的方法是在读取文件时一次返回一个块。如果这不是一个选项,请将主字节数组放入 ByteBuffer,并返回该 ByteBuffer 的切片,这样就不会复制字节。
-
Streams 标签因为,我想寻找某种函数式编程解决方案。
-
我不太清楚你所说的避免 if/then/else 是什么意思。您几乎必须有一个条件语句,因为您要截断第一个块而不是最后一个块。您可以使用像
?...:或Math.max/min 这样的环形交叉口形式,但无论如何,条件构造是必要的。
标签: java file java-8 split java-stream