文件指示器可以指向任何地方,读文件时从文件指示器开始的地方读
多线程下载:如第一个线程下载0k-1k之间的内容,第二个线程下载1K-2k之间的内容……最后把它们组合到一起
这种方式就需要使用文件指示器。
等长记录格式的文件就是一条条有规律的记录信息的文件,如一条条的员工信息,学生的成绩信息。
在java中一个英文字符和一个中文字符都是占用两个字节,只要是字符,数字,英文,汉字,都占两个字节,都是一个char。
但你不加上字符,编码不同就不一定哦
int数据在内存中占4个字节
long占8个字节
float占8个字节
double占16个字节
java中的字符用的是unix,\u0000表示空字符
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
class Employee
{
String name = "null";
int age = 0;
public static final int len = 8;
public Employee(String name, int age)
{
if(name.length() > 8)
{
this.name = name.substring(0, 8);
}
else
{
while(name.length() <len)
{
name += "\u0000";
}
this.name = name;
}
this.age = age;
}
}
public class RandomAccessTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Employee e1 = new Employee("张三",-23);
Employee e2 = new Employee("lisi",24);
Employee e3 = new Employee("wangwu",25);
try {
RandomAccessFile ra = new RandomAccessFile("employee.txt","rw");
try {
ra.writeChars(e1.name);
ra.writeInt(e1.age);
ra.writeChars(e2.name);
ra.writeInt(e2.age);
ra.writeChars(e3.name);
ra.writeInt(e3.age);
ra.close();
String strName = " ";
RandomAccessFile raf = new RandomAccessFile("employee.txt","r");
raf.skipBytes(Employee.len*2 + 4);
for(int i=0;i<Employee.len;i++)
{
strName += raf.readChar();
}
System.out.println(strName.trim() + ":" + raf.readInt());
raf.seek(0);
strName = " ";
for(int i=0;i<Employee.len;i++)
{
strName += raf.readChar();
}
System.out.println(strName.trim() + ":" + raf.readInt());
raf.skipBytes(Employee.len*2 + 4);
strName = " ";
for(int i=0;i<Employee.len;i++)
{
strName += raf.readChar();
}
System.out.println(strName.trim() + ":" + raf.readInt());
raf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}