2017-05-02 6 views
0

Javaで書かれたプロジェクトコードの一部に固執しています。問題は、次のメソッドが呼び出されるたびに次のとおりです。DataInputStream.readUTFを使用してStringを読み取ったときのjava.io.EOFException

public static void printData(File f,int n){ 

    try { 
     DataInputStream dis = new DataInputStream(new FileInputStream(f)); 
     for (int i = 0; i < 5; i++) { 
     System.out.println(dis.readUTF()); 
     } 

     dis.skipBytes(43*(n-10)); 

     for (int i = 0; i < 5; i++) { 
     System.out.println(dis.readUTF()); 
     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 
それが再び読み取ろうとする際にコードがEOFExceptionでは私は特定のバイト数をスキップしようとするたびに投げ、言い換えれば、プログラムが停止押しつぶす

2番目のFORループ(最初のものはうまく動作します)が、skipBytesメソッドに関連しているようです...しかし、これを引き起こしているのは明確にはわかりません。どんな小さな助けも歓迎です。

ちなみに、43は各行のバイト数で、n(2^9)はfで書かれた行数です。

+0

でそれらをスキップ:それは、EOFExceptionでは場合にスローされますか?それは静的な値ですか、それとも他のコードによって決定されていますか? – Sasang

+0

'43 *(n-10)'の値はどれくらいですか?あなたのファイルはどれくらいですか? –

答えて

0

DataInputStream.readUTF()メソッドのドキュメントを参照してください。

EOFException - if this stream reaches the end before reading all the bytes. 

だから、あなたはすでにすべてのバイトを読み込むか、あなたはどのようにあなたが最初に 'N'の値を得るのですか

dis.skipBytes(43*(n-10)); 
関連する問題