有个日志文件,二进制的。里面的信息有:范围(字节)        内容
0--31         登入用户名
32--67        /*不需要的信息*/
68--71        进程ID
72--73        登入类型(7为登入,8为登出)
74--79       /*不需要的信息*/
80--83        登入时间(单位为秒)
84--113      /*不需要的信息*/
114--372      登入的IP地址以上信息为一条信息,大小为372字节
例如这个日志文件有10条信息,总大小为3720字节现在我想要读这个文件,并在控制台输出以上信息(/*不需要的信息*/  就不用输出了)

解决方案 »

  1.   

    回复#1楼
    一条数据共372个字节,信息都是连着的。
    文件大小除以372就是条数。
    我主要是不会把2进制的转换成我要的信息,比如转成int,string,short
      

  2.   

    范围(字节) 内容
    0--31 登入用户名
    32--67 /*不需要的信息*/
    68--71 进程ID
    72--73 登入类型(7为登入,8为登出)
    74--79 /*不需要的信息*/
    80--83 登入时间(单位为秒)
    84--113 /*不需要的信息*/
    114--372 登入的IP地址日志里面的信息格式就是上面这样的吗?
      

  3.   


    0--31 登入用户名 btte[32]
    32--67 /*不需要的信息*/ btte[36]
    68--71 进程ID btte[4]
    72--73 登入类型(7为登入,8为登出) btte[2]
    74--79 /*不需要的信息*/ btte[6]
    80--83 登入时间(单位为秒) btte[4]
    84--113 /*不需要的信息*/ btte[30]
    114--372 登入的IP地址 btte[259]
    怎么像作业题。。
      

  4.   

    unix的日志。的确是像作业帮帮啦
      

  5.   

    你可以给我的邮箱里发个类似的文件 然后详细的谈下哦如果你会用DataInputStream 我想应该是不困难的 利用skipBytes应该就能完成了吧
      

  6.   

    用RandomAccessFile "rw" 来完成。给你个例子:import java.io.RandomAccessFile;/**
     * 随机访问文件(对二进制文件写入和读出)
     * http://www.juheit.com
     */
    public class StudyRandomAccessFile{ public static void main(String[] args) throws Exception{

    //定义随机访问文件
    RandomAccessFile raf = new RandomAccessFile("studentinfo", "rw");

    //获得文件中的指针
    long filePointer = raf.getFilePointer();
    System.out.println("filePointer:" + filePointer);

    //以字节的形式写入字符串
    raf.writeBytes("zhangsan");
    filePointer = raf.getFilePointer();
    System.out.println("filePointer:" + filePointer);

    //以字节的形式写入整数
    raf.writeByte(23);
    filePointer = raf.getFilePointer();
    System.out.println("filePointer:" + filePointer);

    //以字节的形式写入字符串
    String lisi = "" + '\u0000' + '\u0000' + '\u0000' + '\u0000' + "lisi";
    raf.writeBytes(lisi);
    filePointer = raf.getFilePointer();
    System.out.println("filePointer:" + filePointer);

    //以字节的形式写入整数
    raf.writeByte(36);
    filePointer = raf.getFilePointer();
    System.out.println("filePointer:" + filePointer);

    //以字符的形式写入王五
    String wangwu = "      王五";
    raf.writeChars(wangwu);
    filePointer = raf.getFilePointer();
    System.out.println("filePointer:" + filePointer);

    //将指针移到开始的位置
    raf.seek(0);
    filePointer = raf.getFilePointer();
    System.out.println("filePointer:" + filePointer);

    //读取文件内容
    byte[] buffer = new byte[8];
    raf.read(buffer);
    //显示读取内容
    System.out.println("content:" + new String(buffer));
    filePointer = raf.getFilePointer();
    System.out.println("filePointer:" + filePointer);

    byte target1 = raf.readByte();
    System.out.println("target1:" + target1);
    filePointer = raf.getFilePointer();
    System.out.println("filePointer:" + filePointer);


    buffer = new byte[8];
    raf.read(buffer);
    System.out.println("content1:" + new String(buffer));
    filePointer = raf.getFilePointer();
    System.out.println("filePointer:" + filePointer);

    target1 = raf.readByte();
    System.out.println("target2:" + target1);
    filePointer = raf.getFilePointer();
    System.out.println("filePointer:" + filePointer);

    String target3 = "";

    //读取中文字符
    for(int i = 0; i < wangwu.length(); i ++){
    char currentChar = raf.readChar();
    target3 += currentChar;
    }
    System.out.println("target3:" + target3);
    filePointer = raf.getFilePointer();
    System.out.println("filePointer:" + filePointer);

    //关闭随机访问文件
    raf.close();
    }}
      

  7.   

    用DataInputStream来完成也可以。
    //@author: http://www.juheit.comDataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(new File("文件名"))));

    //开始读取指定的数据,如:
    boolean data1 = in.readBoolean();
    int data2 = in.readInt();
    String data3 = in.readUTF();
      

  8.   

    对流不是很熟悉对不起Java啊
    先吃饭去了。先感谢下csdn,再感谢下各位
      

  9.   

    流是Java中最简单的部分,直接上图,帮你解决一下的疑惑!
      

  10.   

    这好像是操作系统的日志文件
    FileInputStream fso = new FileInputStream("abc.txt");
    java.nio.channels.FileChannel fChannel = fso.getChannel();
    java.nio.ByteBuffer buffer = ByteBuffer.allocate(fso.available());
    fChannel.read(buffer);
    buffer.rewind();
    fChannel.close();
    fso.close();
    然后安字节规则隔多少个字节读一下buffer
      

  11.   

    已经解决了。用data流读,什么类型就读什么。int id = dis.readInt();