我想将任何类型(音频,视频,图像...)的大文件分块为小块。我尝试了很多算法,但我无法做到这一点。任何人可以建议我一个工作算法?用于任何类型数据的分块算法
-1
A
回答
0
使用下次启动位置只需复制块到小档案:
N = FileSize/ChunkSize //integer division
RestSize = FileSize % ChunkSize //integer modulo
for i = 0 to N - 1
Copy ChunkSize bytes from position i * ChunkSize into ChunkFile[i]
if RestSize > 0
Copy RestSize bytes from position N * ChunkSize into ChunkFile[N]
举例:需要划分7个字节的文件转换成2个字节的块。 N = 3,RestSize = 1。三个2字节文件和一个1字节。
0
即使我们有这样的内存,也无法一次读取大块文件。基本上对于每个拆分,您可以读取固定大小的字节数组,您知道在性能和内存方面应该可行。
public static void main(String[] args) throws Exception
{
RandomAccessFile raf = new RandomAccessFile("test.csv", "r");
long numSplits = 10; //from user input, extract it from args
long sourceSize = raf.length();
long bytesPerSplit = sourceSize/numSplits ;
long remainingBytes = sourceSize % numSplits;
int maxReadBufferSize = 8 * 1024; //8KB
for(int destIx=1; destIx <= numSplits; destIx++) {
BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream("split."+destIx));
if(bytesPerSplit > maxReadBufferSize) {
long numReads = bytesPerSplit/maxReadBufferSize;
long numRemainingRead = bytesPerSplit % maxReadBufferSize;
for(int i=0; i<numReads; i++) {
readWrite(raf, bw, maxReadBufferSize);
}
if(numRemainingRead > 0) {
readWrite(raf, bw, numRemainingRead);
}
}else {
readWrite(raf, bw, bytesPerSplit);
}
bw.close();
}
if(remainingBytes > 0) {
BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream("split."+(numSplits+1)));
readWrite(raf, bw, remainingBytes);
bw.close();
}
raf.close();
}
static void readWrite(RandomAccessFile raf, BufferedOutputStream bw, long numBytes) throws IOException {
byte[] buf = new byte[(int) numBytes];
int val = raf.read(buf);
if(val != -1) {
bw.write(buf);
}
}
你也应该寻找各种网站上像https://coderanch.com/t/458202/java/Approach-split-file-chunks一些讨论,并在其他网站上。 快乐编码。
相关问题
- 1. 用于聚类算法的数据集
- 2. SQL2008中用于地理数据类型的距离算法
- 3. 用于分类松散可比数据的算法?
- 4. 用于数据分类的机器学习算法。
- 5. 用于计算任意大数的类?
- 6. 如何使用泛型来创建通用的分块算法?
- 7. 转换任何数据类型的NSString
- 8. 对于任何类型的文件,计算CRC16时哪种数据类型更好
- 9. Haskell - 数据类型的算术运算
- 10. 任何一种优化Apriori算法的数据挖掘算法?
- 11. 阵列算法中的分块数组
- 12. C++类中的任意数据类型
- 13. 获取适用于任何类别的泛型类型列表
- 14. 是否有可应用于分类数据输入的特征选择算法?
- 15. 数字根分类算法
- 16. 冲突的数据类型是否有任何解决方法?
- 17. 用于匹配数据的算法
- 18. 红豆发现任何数据类型
- 19. 是否大于任何日期数据类型?
- 20. 用于存储同步数据的分布式算法
- 21. 蟒“类型错误:unhashable类型:‘切片’”用于编码分类数据
- 22. 用于快速类型分析和变量类型分析的预定义算法
- 23. 用于细长数据集的聚类K均值算法
- 24. Hive中用于百分比的数据类型是什么?
- 25. 适用于保存百分比值的数据类型?
- 26. 用于XML解析的数据类型
- 27. 适用于Windows.System.Colors的MSAccess数据类型
- 28. 用于存储URL的数据类型
- 29. Go - 用于验证的数据类型
- 30. 任何常用的索引/搜索数据的算法?
你是什么意思?你是否想将任何文件分成几部分,而不是关心内容类型? – MBo
是的,我必须把它切成小块 –
['split'](https://www.gnu.org/software/coreutils/manual/html_node/split-invocation.html)怎么样? –