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 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题