0

Javaで(非常に単純化された)マルチスレッド圧縮プログラムを作成する必要がある割り当てがあります(組み込みのGzipOutputStreamを使用しても問題ありません)。私は他のすべての方法をほとんど理解していますが、入力ストリームを128kBブロックに分割する必要があることを指定する命令の一部があり、各スレッドはそれらのブロックの1つを圧縮する作業を行います。

明らかに明らかなものが欠けていると思いますが、現時点では、入力ストリームを分割するために考えられる唯一の方法は、IO InpuStreamのread()コマンド(一度に1バイトを読み取る)を使用し、手動でカウントアップすることです。 128または、最初にファイルの最後に到達した場合。しかし、それはひどく非効率的なようです。

もう1つは、接線が少しずれていて、まだ忙しく調べて理解しようとしていることです。これは、前の各ブロックの最後の32kBを使用して、次のブロックの圧縮辞書を準備することになっているということです。それが何を意味するのか漠然と理解していますが、それを実装する方法や、入力ストリームをバイトごとに処理する方法に影響するかどうかは完全にはわかりません。

編集:指定するには、別の辞書を考えていない限り、デフレータクラスは圧縮レベル(1〜9)を設定するintを取り込むことができますが...32kBに対応するようにする方法がわかりません、まったく新しい辞書を書く必要がない限り。圧縮のみを行っているので、インフレータクラスなどは必要ありません。

4

1 に答える 1

0

明らかに明らかなものが欠けていると思いますが、現時点では、入力ストリームを分割するために考えられる唯一の方法は、IO InpuStreamのread()コマンド(一度に1バイトを読み取る)を使用し、手動でカウントアップすることです。 128または、最初にファイルの最後に到達した場合。しかし、それはひどく非効率的なようです。

うん。それはひどい解決策になるでしょう。

BufferedInputStreamまたはを使用する必要がありますInputStream.read(byte[], int, int)。このFile.length()メソッドは、入力がファイルの場合にも役立つ可能性があります。

これは宿題ですので、詳細はお任せします。

于 2012-10-27T01:52:52.967 に答える