zfu3382548 2011-11-24 21:14
浏览 399
已采纳

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条回答 默认 最新

  • yy1230 2011-11-24 22:06
    关注

    前面都不说了,
    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。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条