どのような種類(オーディオ、ビデオ、イメージなど)の大きなファイルを小さなものにチャンクしたいと思います。私は多くのアルゴリズムを試しましたが、私はこれを行うことができません。誰でも私に動作するアルゴリズムを提案できますか?任意の種類のデータのチャンクアルゴリズム
-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]
例:2バイトのチャンクに7バイトのファイルを分割する必要があります。 N = 3、RestSize = 1. 3つの2バイトファイルと1つの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. 種類の「任意」の種類を「UnsafeMutablePointer <Int16>」に変換する方法
- 2. PhoneGapの/コルドバでの任意の種類のファイルをアップロードし
- 3. Swift:任意の種類の関数パラメータとしてのシーケンス
- 4. apache-の種類のPOJOを含むjava.util.Listにソートする任意のユーティリティメソッドは、*ライブラリ
- 5. webserviceは任意の種類のサーバーに画像をアップロードできますか?
- 6. JAX WSのXSD:任意の種類は、XSDを処理XMLスキーマ要素
- 7. フィッティング任意のデータ
- 8. 種類/種類Haskell(多分)代数データ型の混乱
- 9. 任意のデータのrequirejs config
- 10. Enumの種類Enumの種類
- 11. (.net)デザインの種類の種類
- 12. 2種類のデータにCoreDataを使用
- 13. Webサーバーの特定のディレクトリから任意の種類のファイルをダウンロードするAspxページ
- 14. アップロードファイルの種類
- 15. ワードプレスイベントの種類
- 16. リンクされたリストまたは任意の種類のリストのリスナーを追加する
- 17. 「任意の」私は型の配列を持つプライム-ngのデータリストで2 ngFor異なる種類
- 18. テキスト内の任意の種類の箇条書きを特定して削除する方法
- 19. MySQLのlongtext型フィールドに任意の種類の型(整数、テキスト、日付)を格納していますか?
- 20. 任意の方法に使用するテンプレートの種類を知らないとき
- 21. サイトから画像(または任意の種類のファイル)にアクセスしてメールで通知する場合
- 22. クライアントに任意の種類のPDFリーダーがインストールされているかどうかを検出する
- 23. 任意のアプリケーションからのデータ使用
- 24. SPARKのSVMまたは任意のクラシファイアのインクリメンタルな分類
- 25. 値の種類と参照の種類リアルタイムメモリの割り当て
- 26. 4種類のダイスゲーム
- 27. 2種類のコンテナ
- 28. 大量の種類
- 29. 一般の種類
- 30. C++テンプレートの種類
どういう意味ですか?あなたはコンテンツの種類を気にしないで、ファイルをいくつかの部分にカットしたいですか? – MBo
ええ、私は小さな塊にカットしなければなりません –
['split'](https://www.gnu.org/software/coreutils/manual/html_node/split-invocation.html)はどうですか? –