1。InputStream.Read()について
データストリームからデータを読み取るとき、グラフはシンプルで、inputstream.read()メソッドがよく使用されます。この方法は、一度にストリームから1バイトのみを読み取ることであり、これは非常に非効率的です。 より良い方法は、inputstream.read(byte [] b)またはinputstream.read(byte [] b、int off、int len)メソッドを使用して、一度に複数のバイトを読み取ることです。
2。入力ストリームクラスの使用可能な()メソッドについて
一度に複数のバイトを読み取ると、inputstream.abable()メソッドが使用されることがよくあります。この方法がローカルファイルからデータを読み取るために使用される場合、一般に問題は発生しませんが、ネットワーク操作に使用される場合、しばしばいくつかの問題に遭遇します。たとえば、ソケットが通信している場合、相手は明らかに1,000バイトを送信しますが、彼のプログラムは利用可能な()メソッドを900、または100、さらには0と呼びます。実際、これは、ネットワーク通信が断続的であることが多く、一連のバイトがいくつかのバッチで送信されることが多いためです。ローカルプログラムは、利用可能な()メソッドを0に呼びます。これは、相手がまだ応答していないためか、相手が応答したためかもしれませんが、データはローカルエリアに配信されていません。相手はあなたに1,000バイトを送り、おそらくすべてのデータを取得するために3回の方法()を3回呼び出す必要があります。
このようなコードを書く場合:
int count = in.abable();
[ネットワーク操作]を実行するときにエラーが発生することがよくあります。これは、sendに送信されるデータがまだ到着していない場合があり、得られるカウントは0であるため、ネットワーク操作を実行するとエラーがあります。
このように変更する必要があります:
int count = 0;
3。InputStream.Read(byte [] b)およびinputstream.read(byte [] b、int off、int len)について
どちらの方法も、ストリームから複数のバイトを読み取るために使用されます。たとえば、最初の方法では、プログラマーはプログラムがB.Lengthバイトを読み取ることができることを望んでいますが、実際の状況は、システムがそれほど多く読み取ることができないことです。 Java API命令を慎重に読んだ後、この方法では非常に多くのバイトを読み取ることができることを保証するものではなく、非常に多くのバイトを読み取ることができることを保証することしかできません(少なくとも1)。したがって、プログラムをカウントバイトを読み取らせる場合は、次のコードを使用することをお勧めします。
byte [] b = new byte [count]; ;
このコードは、IO例外がデータストリームの中央または終了で発生しない限り、カウントバイトが読み取られるようにすることができます(eofexception)
4。PowerPointファイルの読み取り例
Import java.InputStream。 hslf .model.slide; apache.poi.hslf.slideshow(index、string url、inputstream is) Slideshow ss = new Slideshow(new hslfslideshow(is)); //はファイルの入力ストリームです。スライドスライドを作成します[] slides = ss.getslides(); //各スライドを取得します(int i = 0; i < slides.length; i ++){textrun [] t = slides [i] .getTextruns(); //スライドのテキストコンテンツを取得するために、(int j = 0; j <t.length; j ++ ){content .append(t [j] .getText()); Title、content .toString());