Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8将字节分割成块_Java_File_Java 8_Split_Java Stream - Fatal编程技术网

Java8将字节分割成块

Java8将字节分割成块,java,file,java-8,split,java-stream,Java,File,Java 8,Split,Java Stream,我必须创建一个方法,在这个方法中我需要将文件分块成多个字节 示例将字节[]放入列表, 假设它的大小都是1MB(sizeMB=1*1024*1024) 所以5.2MB文件应该是5个1MB和1个2KB的列表。 [2kb,1MB,1MB,1MB,1MB,1MB,1MB] byte[] mainFile=getFIle(); List<bute[]> listofSplitBytes=getFileChunks(mainFile); public void list<bute[]&g

我必须创建一个方法,在这个方法中我需要将文件分块成多个字节

示例将字节[]放入列表, 假设它的大小都是1MB(sizeMB=1*1024*1024)

所以5.2MB文件应该是5个1MB和1个2KB的列表。 [2kb,1MB,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
}
byte[]mainFile=getFIle();
ListListofSplitBytes=getFileChunks(主文件);
公共无效列表getFileChunks(字节[]mainFile){
int sizeMB=1*1024*1024;
//拆分文件逻辑
}
我试图避免添加,if-then-else,以进行处理。我想知道是否有更干净的方法,比如使用流或类似的东西?

试试这个:

public List getFileChunks(byte[]mainFile){
int sizeMB=1*1024*1024;
列表块=新的ArrayList();
对于(int i=0;i
或者,如果您想要功能解决方案,请尝试以下方法:

public List getFileChunks(byte[]mainFile){
最终整数大小b=1*1024*1024;
返回IntStream.iterate(0,i->i+sizeMB)
.limit((mainFile.length+sizeMB-1)/sizeMB)
.mapToObj(i->Arrays.copyOfRange(mainFile,i,Math.min(i+sizeMB,mainFile.length)))
.collect(Collectors.toList());
}

这篇文章可能会对您有所帮助:对于大文件,这将严重破坏您程序的内存使用。想象一下,读取一个500 MB的文件,在RAM中有两个副本。更好的方法是在读取文件时一次返回一个块。如果这不是一个选项,请将主字节数组放入ByteBuffer中,并返回该ByteBuffer的片段,这样就不会复制bytes.Streams标记,因为我想寻找某种函数式编程解决方案。我不确定避免If/then/else是什么意思。由于要截断第一个块而不是最后一个块,因此几乎必须有一个条件语句。您可以使用诸如
或Math.max/min之类的迂回形式,但无论如何,都需要条件构造。