私のアプリケーションは、 TDAEntryと呼ばれるタイプのテキスト ファイルを編集できます。このような各エントリは、 TDAFormと呼ばれる、その形式を記述する別の種類のファイルに基づいています。TDAEntryテキスト ファイルの最初の行は、それが属するフォームの名前であり、その後に残りのデータ (テキスト形式) が続きます。
このようなファイルを開くために、簡略化した私のコードを次に示します。
InputStream entryInput = new FileInputStream(file);
BufferedReader entryReader = new BufferedReader(
new InputStreamReader(entryInput)); // PROBLEMATIC #1
String formName = entryReader.readLine();
TDAForm form = new TDAForm(formName);
// create an entry with the right form and the data which follows in entryInput
TDAEntry entry = new TDAEntry(form, entryInput); // PROBLEMATIC #2
これが問題です。のソース コードをInputStreamReader
読むと、このクラスのコードを読むことになります。
これはバッファリングされます。つまり、約 8000 バイト先まで読み取ります。これにより、InputStream
「Problematic #2」の行が空になり、間違った場所になりますが、ファイルの最初の行だけが読み取られたかのように続行したいのです。TDAEntryのコンストラクター内で、ストリーム上に別の種類のリーダーを構築したり、別のことをしたりしたいと思うかもしれません。
明白な解決策の 1 つは、先のバイトを消費しない新しいデコーダーを作成することです。しかし、これを行うより簡単な方法があるかどうか疑問に思っています。この問題にどのように取り組みますか、または同じことを達成するための別のプログラミング構造を提案しますか?
どうもありがとう!