我的想法有一个结......我将 int 0 写入文件三次,每次后面跟一个行尾指示符(我尝试过 \n (0x0A) 和 \r (0x0D))。这是文件的内容(以字节为单位)
00 00 00 00 0D 00 00 00 00 0D 00 00 00 00 0D
读回来,我包装了一个
FileInputStream is = new FileInputStream(theFile);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
然而,我第一次打电话给
String s = br.readLine();
读取到文件的末尾(位置 15),而不是像我希望的那样在位置 5(即 0x0D)处停止。有人知道我在哪里误解了事情的运作方式吗?非常感谢。
根据以下评论添加信息:代码是
public class TestApp4 {
public static void main(String args[]) {
try {
File theFile = new File("Test.dat");
FileInputStream is = new FileInputStream(theFile);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
System.out.println("input stream position: " + is.getChannel().position());
String s = br.readLine();
byte[] bs = s.getBytes();
int i = ByteBuffer.wrap(bs).getInt();
System.out.println("input stream position: " + is.getChannel().position());
System.out.println("line: " + i);
s = br.readLine();
System.out.println("line: ");
s = br.readLine();
System.out.println("line: ");
br.close();
} catch (Throwable e) { e.printStackTrace(); }
}
}
我从中得到的输出是
input stream position: 0
input stream position: 15
line: 0
line:
line:
我知道我哪里出错了。每个
br.readLine();
准确地打破它应该的地方。我的困惑源于以下事实
is.getChannel().position()
前进到文件末尾而不是行尾。我误解了这个值代表读入字符串的最后一个位置——这显然是不正确的。看起来这是读入较大流的位置。感谢您帮助整理我的布布。