RandomAccessFile类补充

1、在这里采用的方法有,writeCharset(String str), writerInt(int v), readChar(), readInt()等,采用这些方法可以有效地因读取位置的错误而造成乱码的问题。

 

例如:将writeChars(String str), 换成write(byte[] byte)

           writerInt(int v) 换成 write(int v)

           read(byte[] byte) 换成 readChar()

           read() 换成 readInt()

会出现什么样的结果呢?package cn.itcast.io; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; public class RandomAccessFileTest { public static void main(String[] args) { Employee e1 = new Employee("zhangsan", 21); Employee e2 = new Employee("lisi", 22); Employee e3 = new Employee("wangwu", 23); try { // 向文件employee.tx中写入数据 RandomAccessFile ra = new RandomAccessFile("employee.txt", "rw"); ra.write(e1.getName().getBytes()); ra.write(e1.getAge()); ra.write(e2.getName().getBytes()); ra.write(e2.getAge()); ra.write(e3.getName().getBytes()); ra.write(e3.getAge()); ra.close(); byte[] buf = new byte[Employee.LEN]; RandomAccessFile raf = new RandomAccessFile("employee.txt", "r"); //读取第二个人的信息 raf.skipBytes(Employee.LEN + 1); int len = raf.read(buf); String strName = new String(buf, 0, len); System.out.println(strName.trim() + ":" + raf.read()); //读取第一个人的信息 raf.seek(0); int len2 = raf.read(buf); String strName2 = new String(buf, 0, len2); System.out.println(strName2.trim() + ":" + raf.read()); //读取第三个人的信息 raf.skipBytes(Employee.LEN + 1); int len3 = raf.read(buf); String strName3 = new String(buf, 0, len3); System.out.println(strName3.trim() + ":" + raf.read()); raf.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 

 

 

若是一个字节一个字节的读写, 一不小心很容易出错,write(byte[] byte) 最多只能写入长度为byte.length 的字符。write(int v) 是写入特定的字节。

 

 

 

 

思考: 如是将 改成   Employee e2 = new Employee("lisi", 2222); 这样,将age改成2222, 打印出来的结果还是2222吗?

 

 

答案是否定的: write(int v) 是写入特定的字节。 字节最大的表示的数是256,所以超过256的话, 输入的结果就与我们想要的结果不一致了,这是为什么呢? 比如:我们将age改成256, 这是输入的结果是0, 怪哉~! 怎么回事零, 但是稍微思考一下就出来了, 256在计算机中用二进制表示为1 00000000, 字节是8位的的所以将一给舍弃掉, 结果就成了00000000, 这不就是0吗!!!!

 

 

你可能感兴趣的:(String,Class,byte)