主營:Java的RandomAccessFile的EOFException類
package main;
import racreader.RAFReader;
public class RandomAccessFile {
public static void main(String[] args) {
if (args.length != 2) {
System.err.println("Wrong arguments length");
System.exit(1);
}
try {
RAFReader reader = new RAFReader (args[0]);
try {
String output = reader.readUTF(Integer.parseInt(args[1]));
System.out.print(output);
} catch (Exception e) {
System.err.println(e.toString());
} finally {
reader.close();
}
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
RAFReader:
package racreader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RAFReader {
private final String fileName;
private final RandomAccessFile reader;
public RAFReader(String fileName) throws FileNotFoundException {
this.fileName = fileName;
this.reader = openFile();
}
private RandomAccessFile openFile() throws FileNotFoundException {
RandomAccessFile reader = new RandomAccessFile(fileName, "r");
return reader;
}
public String readUTF(int offset) throws IOException {
reader.seek(offset);
String output = reader.readUTF();
return output;
}
public void close() throws IOException {
reader.close();
}
}
的問題是在EOFException類中的每個文件(即使是在UTF8編碼),每所抵消。爲什麼?
UPD:我試圖讓我的程序與文件正在與此內容:
Это тест UTF-8 чтения
它只有offset = 0
工作正常。任何其他的偏移量都會引發EOFException。
但是有時我在閱讀開始時會用一些'RandomAccessFile'偏移量來獲得一些特殊的符號。如何自動同步UTF'InputStream'? – michaeluskov
如果偏移量是要跳過的字符數,請確保您正在使用'Reader#skip()',而不是'RandomAccessFile#seek()'。後者將以字節爲單位,因此它可以將流指向由幾個字節編碼的字符的中間,因此是特殊符號。 –