writeUTF(String) 写入字符串时,FilePointer是怎么指向的??

为什么使用rf.writeUTF()写入字符串时,当字符串为空时,rf.getFilePointer()返回为18,当String越长,文件指针反而指向的更前。小弟是菜鸟,希望大家多多指点!直接附上代码。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessTest {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    String a = File.separator;
    String s1 = "C:" + a + "test";
    File file = new File(s1);
    Student stu1 = new Student("jjkbwqdsa", 20);
    Student stu2 = new Student("1fdasdasd7", 20);
    Student stu3 = new Student("啵啵啵", 20);
    if (!(file.exists())) {

        file.mkdir();
    }

    RandomAccessFile rf = new RandomAccessFile(new File(file, "1.txt"),
            "rw");
    try {
        rf.writeUTF(stu1.name);
        System.out.println("此时文件指针当前位置:"+rf.getFilePointer());
                //此时文件指针当前位置:10

        rf.writeInt(stu1.age);
        System.out.println("此时文件指针当前位置:"+rf.getFilePointer());
            //此时文件指针当前位置:14

        rf.writeChars(stu2.name);
        System.out.println("此时文件指针当前位置:"+rf.getFilePointer());
        //此时文件指针当前位置:30
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        rf.seek(31);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    rf.writeUTF(stu3.name);
    System.out.println("此时文件指针当前位置:"+rf.getFilePointer());
                //此时文件指针当前位置:52   ????这个怎么由30一下跳到52了,求解!

}

}

class Student {
String name;
int age;
private static final int LEN = 8;

public Student(String name, int age) {
    if (name.length() > LEN) {
        name = name.substring(0, 8);
    } else {
        while (name.length() < LEN)
            name = name + "\u0000";
    }
    this.age = age;
    this.name = name;
}

}

1个回答

前面都不说了,
name3 = "啵啵啵\u0000\u0000\u0000\u0000\u0000"
这个没问题
我们把输出分开

System.out.println("此时文件指针当前位置:"+rf.getFilePointer()); --31
rf.writeUTF("啵啵啵");

System.out.println("此时文件指针当前位置:"+rf.getFilePointer()); --42

rf.writeUTF("\u0000\u0000\u0000\u0000\u0000");
System.out.println("此时文件指针当前位置:"+rf.getFilePointer()); --54

现在结果54给你的52是一样的,因为我多输了一次,这个没问题,42到54也没问题.

lz
还有一个应该注意就是rf没有close。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐