ファイルのセグメンテーションとマージは一般的な要件です。たとえば、大きなファイルをアップロードするときは、最初に小片に分割し、マージする前にサーバーに転送できます。多くのハイエンド分散ファイルシステム(GoogleのGFSやTaobaoのTFなど)では、ブロックユニットに従ってファイルも分割またはマージされています。
基本的なアイデアを見てください:
大きなファイルがある場合は、スプリットサイズを指定します(たとえば:1mでカット)
ステップ1:
まず、元のファイルサイズとセグメンテーションサイズに基づいて最終的に分割される小さなファイルの数を計算します。
ステップ2:
ディスク上にこれらのn小さなファイルを作成します
ステップ3:
複数のスレッドを開きます(スレッド数=分割ファイルの数)。各スレッドで、RandomAccessFileのSEEK関数を使用して、元のファイルの各セグメントの最初の位置に読み取りポインターを見つけ、指定されたサイズを後方に読み取り(つまり、セグメント化されたブロックのサイズ)、最後に対応するスプリットファイルを書き込みます。マルチスレッドが並行して処理されるため、それぞれが独自の小さなファイルを書き込みます。これは比較的高速です。
次のコードは、ファイルを複数のサブファイルに分割することです。
package testio; import java.io.file; import java.io.fileinputStream; import java.io.fileoutputStream; import java.util.arrays; public static void main(string [] args){//ソースファイルを最初にメモリに読み取るfile( "f:/test/test.txt"); //ファイルオブジェクトsplitfile(srcfile、それぞれのsrcfile);} public static void splitfile(file srcfile、int intize){//ファイルがスプリット要件を満たしているかどうかを判断します。要件 ");} byte [] filecontent = new byte [(int)srcfile.length()]; try {//メモリfileinputStream fis = new fileinputStream(srcfile); fis.read(filecontent); fis.close();} catch(){ecprintstacktrase of of of of of of of(); fis.close(); fis.read(filecontent); filenumberに分割される; if(filecontent.length%hirlsize == 0){filenumber.length/hirssize;} else {filenumber.length/length/redize+1;} = new file(srcfile.getParent()、fileName); //現在のファイルパスバイト[]各content; //ソースファイルのコンテンツをスプリットファイルにコピーするif(i!= filenumber-1){hilecontent = arrays.copyofrange(filecontent、filesize*i、edisize*); arrays.copyofrange(filecontent、それぞれの*i、filecontent.length);} try {fileoutputStream fos = new fileoutputStream(fi); fos.write(hilectontent); fos.close(); system.out.printf( "出力サブファイル%(" %d/n "、fi.getabsolutefile()、fi.length()、extencontent.length);} catch(exception e){// todo:例外e.printstacktrace();}}}}}}}}}}要約します
上記は、ファイルを複数のサブファイルコードの例に分割することに関するこの記事の内容全体です。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!