違いはReader と Inputstreamだと思います。あなたの例では、PDFドキュメントはバイナリデータであり、文字ごとではなくバイトごとに転送する必要があります。Reader と InputStream の詳細については、同じフォーラムのこのリンクを確認してください。リーダーによるストリームのラッピングについて言及されていましたが、バイナリ データについて前述したように、これはお勧めできません。
編集:1
Reader と InputStream の read メソッドの動作を確認してみましょう
Reader.read()
0 から 65535 の範囲の整数 (単一の 16 ビット Unicode 文字) を返します
InputStream.read()
データのバイト (8 ビットの符号付き 2 の補数整数) を返します
ここで、Reader を使用してバイナリ データ (8 ビット整数のシーケンス) を読み取ると、1 バイト (8*2) が文字であると仮定して読み取る代わりに、2 バイト (8*2) を読み取ることになると想像してください。
のコードを見たことが PdfReader
ないので、 を使用しているかどうかはわかりませんjava.io.Reader
。この説明は完全に のためのものjava.io.Reader/InputStream
です。PdfReader
あなたが言及した方法で使用された場合、良くないという リンクまたは投稿を共有していただければ幸いです。
編集:2
覚えて:
- ネットワークから、ストリーム バイトを一度だけ読み取ることができます。
- 複数のタスクでこれらのバイトが必要な場合は、それらのバイトを配列に格納し、同じ配列を複数回使用することをお勧めします
使用する場合
PdfReader localPdfReader = new PdfReader(item.getinputStream());
次に、PdfReader はストリームからバイトを内部的に読み取り、それを使用して検証します。今後の使用のために保存することはありません。
使用する場合
IOUtils
バイトをネットワークからバイト配列にコピーし、後でそれPdfReader
を JDBC 呼び出しで使用して DB に格納します。