2016-09-27 41 views
0

InputStream処理に問題があります。私はファイルをアップロードしてSpringMVCプロジェクトを持っています。ファイルはプレーンテキストファイルです。最初に文字エンコーディングを確認したいので、ストリームを使用して文字セットのエンコーディングを検出します。そして、このエンコーディングに従って、私はファイルを読み込もうとします。私の問題は、私は文字セットを検出しているときInputStreamポインタが転送されるので、私は後にファイルを読み込もうとすると、ファイルの先頭をスキップします。Javaでのファイルアップロード時のInputStreamのリセット

私はいくつかのリストにいくつかのリストを追加することができますこのリストを最初に読んで、ストリームを続行することができますが、私はメモリ内のファイル全体を終了したくないと思う。

ファイルアップロードの最初からストリームを開始するにはどうすればよいですか?

答えて

1

XY問題。文字エンコーディングは必要ありません。 ReadersWritersではなく、ストリームを使用して着信データをコピーするだけです。このように、エンコードが何であれ、それは保存されます。

+0

あなたの答えをありがとう、問題は私がエンコーディングを保持したくないということです。私はユーザーがアップロードしたデータでpdfを生成しています。 Pdfはutf-8で生成されますが、ユーザーはローカルエンコードでファイルをアップロードします。だから私は最初にエンコーディングを検出したかったのです。 utf-8形式に変換する必要があります。 – aios

0

一部のデータを読み込んだら、ストリームを再開することはできません。これはストリームの機能です。 あなたは事前に文字セットを知らないし、それがデフォルトと異なる場合があります場合は、あなたがより良いそして、メモリ内構造やファイルへのストリームコンテンツを保存してしまう

new BufferedReader(new InputStreamReader(stream, charset)); 

たとえば、あなたが好きなリーダークラスを使用することができますそれを分析する。

+0

ありがとう、私はメモリを使用して終了しました。私はバイト配列で読み取りデータを(検出まで)保存し、SequenceInputStream(byteArrayStream、originalStream)とバッファリングされたリーダーを使用して1つのストリームに結合しました。私はそれが記憶を爆破しないことを願っています。 – aios

+0

はいできます。 'mark()'と 'reset()'を参照してください。 – EJP

関連する問題