android学习札记第7章之IO流二
1、RandomAccessFile
(双向:既能读又能写,还可以移动下标,不属于IO流,可以对File进行操作)
①读写文件中的字节数据,用下标读写文件中的指定位置的字节值。
②创建对象:RandomAccessFile raf=new RandomAccessFile(路径字符串或File对象,"rw");//不存在直接新建空文件
2、方法:
write(int b):写入int型的b,输出int转为“十六进制”中四个字节的末尾1个字节。(强转成byte)
write(byte[] buffer):输出数组中全部的字节值。
write(byte[] buffer,int from,int num):输出数组中的从from开始的num个字节值。
read():读取一个字节值,然后前补三个0字节,变成int类型,读取结束返回-1。
read(byte[] buffer): 根据指定数组长度,读取一批字节值,并放入指定的数组buffer中,并返回放入数组的字节数量, 当读取结束返回-1。
seek(int i):将指针移动到指定位置。
getFilePointer():获得当前所在的位置的下标。
writeInt(int i):输出int类型的4个字节值
writeDouble(double d):输出int类型的8个字节值
writeUTF(String s):先输出2个字节值,表示字符串的字节长度,再输出字符串的字节值。
readInt():读取4个字节值转成int
readDouble():读取8个字节值转成int
readUTF(): 先读取2个字节值,来确定字符串的字节长度,再读取这些字节值,转成String。读取结束再读取会 出现EOF读取结束异常。
3、练习:
对文件进行加密、解密。
1、①父类:java.io.OutputStream/InputStream(抽象类)
②子类:java.io.FileInputStream/FileOutputStream(直接与文件相接,读写文件中的数据。不可定位指针的位置,只能顺序读写。)
③创建对象:
FileOutputStream out=new FileOutputStream(文件或字符串);//不论文件是否存在,都会新建空文件。
FileOutputStream out=new FileOutputStream(文件或字符串,true);//不存在,会新建空文件;则存在直接追加数据。
2、方法:
拥有抽象类OutputStream/InputStream的方法。
①OutputStream:
write(int b):写入int型的b,输出int转为“十六进制”中四个字节的末尾1个字节。(强转成byte)。
write(byte[]):输出数组中全部的字节值。
write(byte[],int from,int num):输出数组中的从from开始的num个字节值。
flush():刷出缓存,缓存满了自动刷出,不满需要手动刷出。
②InputStream:
read():单字节读取。
read(byte[]):多字节读取。
available():获取剩余的可读取字节量。
3、练习:
将原文件复制成目标文件。
1、①提供内存缓冲区数组,提高“单字节”读写效率,缓存需要flush刷出,刷出后离开缓冲区。
②创建对象:
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(from));//内部数组默认长度:8192字节。
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(from),16*1024);//内部数组长度:16K。
2、练习:
将原文件复制成目标文件。
1、①读写固定字节格式的数据。
②创建对象:
DataOutputStream out=new DataOutputStream(想接的流);。
2、方法:
①DataOutputStream:
writeInt(int i):输出int类型的4个字节值。
writeDouble(double d):输出int类型的8个字节值。
writeUTF(String s):先输出2个字节值,表示字符串的字节长度,再输出字符串的字节值。
②DataInputStream:
readInt(int i):读取4个字节值转成int。
readDouble(double d):读取8个字节值转成int。
readUTF(String s): 先读取2个字节值,来确定字符串的字节长度,再读取这些字节值,转成String。读取结 束再读取会出现EOF读取结束异常。