有个日志文件,二进制的。里面的信息有:范围(字节) 内容
0--31 登入用户名
32--67 /*不需要的信息*/
68--71 进程ID
72--73 登入类型(7为登入,8为登出)
74--79 /*不需要的信息*/
80--83 登入时间(单位为秒)
84--113 /*不需要的信息*/
114--372 登入的IP地址以上信息为一条信息,大小为372字节
例如这个日志文件有10条信息,总大小为3720字节现在我想要读这个文件,并在控制台输出以上信息(/*不需要的信息*/ 就不用输出了)
0--31 登入用户名
32--67 /*不需要的信息*/
68--71 进程ID
72--73 登入类型(7为登入,8为登出)
74--79 /*不需要的信息*/
80--83 登入时间(单位为秒)
84--113 /*不需要的信息*/
114--372 登入的IP地址以上信息为一条信息,大小为372字节
例如这个日志文件有10条信息,总大小为3720字节现在我想要读这个文件,并在控制台输出以上信息(/*不需要的信息*/ 就不用输出了)
一条数据共372个字节,信息都是连着的。
文件大小除以372就是条数。
我主要是不会把2进制的转换成我要的信息,比如转成int,string,short
0--31 登入用户名
32--67 /*不需要的信息*/
68--71 进程ID
72--73 登入类型(7为登入,8为登出)
74--79 /*不需要的信息*/
80--83 登入时间(单位为秒)
84--113 /*不需要的信息*/
114--372 登入的IP地址日志里面的信息格式就是上面这样的吗?
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]
怎么像作业题。。
* 随机访问文件(对二进制文件写入和读出)
* 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();
}}
//@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();
先吃饭去了。先感谢下csdn,再感谢下各位
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