2516天 Mr.贰呆

唯一自信的就是自己的人品。
寻求王者玩家一起开黑净化峡谷环境​​

【Android】学习札记第7章之IO流二

发布于 / 1391 次围观 / 0 条评论 / Android / 二呆 /

上一节介绍了File类的用法,它可以获取文件对象的信息,这一节将会介绍如何对File对象进行操作,并且深入介绍IO流中几种类的用法,IO流总体包括两大类,字节流和字符流,可以直接接文件的流是FileInputStream/FileOutputStream和ByteArrayInputStream/ByteArrayOutputStream,而可以对字节流进行包装并缓冲加快读写效率的流有很多,不仅下面介绍的这些,还可以根据API,还可以根据eclipse中的快捷键,从IO流父类中可知所有的IO包装流,根据需求供我们使用。

①用到的快捷键:

Ctrl+O:查找方法

Ctrl+T:类的树状结构

Ctrl+Shift+T:查找类

Alt+Shift+M:提取数据成一个方法

②对文件进行操作(双向):

既能读又能写,还可以移动下标,不属于IO流,可以对File进行操作。

③Stream流(单向):

把字节的读写,抽象成字节在管道中流动。分为输入流和输出流。

输入流(read):流入内存,如:读取U盘中的数据。;

输出流(write):流出内存,如:打印Word文档中的数据。

③高级流、操作流:

与其他流相接,提供特定的数据处理功能,操作其他流的流。

工具/原料

JDK、eclipse、android SDK、ADT

一、java.io.RandomAccessFile

1、读写文件中的字节数据,用下标读写文件中的指定位置的字节值。

(双向:既能读又能写,还可以移动下标,不属于IO流,可以对File进行操作)

2、创建对象:

RandomAccessFile raf=new RandomAccessFile(路径字符串或File对象,"rw");//不存在直接新建空文件。

3、方法:

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读取结束异常。

4、练习

对文件进行加密、解密。

二、java.io.FileInputStream/FileOutputStream

1、概述

①父类:java.io.OutputStream/InputStream(抽象类)

②子类:java.io.FileInputStream/FileOutputStream(直接与文件相接,读写文件中的数据。不可定位指针的位置,只能顺序读写。)

③创建对象:

FileOutputStream out=new FileOutputStream(文件或字符串);//不论文件是否存在,都会新建空文件。

FileOutputStream out=new FileOutputStream(文件或字符串,true);//不存在,会新建空文件;则存在直接追加数据。

④方法:

拥有抽象类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():获取剩余的可读取字节量。

2、练习:

将原文件复制成目标文件。

三、java.io.BufferedInputStream/BufferedOutputStream

1、概述

①提供内存缓冲区数组,提高“单字节”读写效率,缓存需要flush刷出,刷出后离开缓冲区。

②创建对象:

BufferedInputStream bis=new BufferedInputStream(new FileInputStream(from));//内部数组默认长度:8192字节。

BufferedInputStream bis=new BufferedInputStream(new FileInputStream(from),16*1024);//内部数组长度:16K。

2、练习:

将原文件复制成目标文件。

四、java.io.DataInputStream/DataOutputStream

1、概述

①读写固定字节格式的数据。

②创建对象:

DataOutputStream out=new DataOutputStream(想接的流);。

③方法:

Ⅰ、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读取结束异常。

注意事项

io.RandomAccessFile是单向的读写不能同时进行,而IO流是双向的可同时进行读写,为了效率考虑,可对字节流进行包装。

DataInputStream/DataOutputStream中的readUTF和writeUTF需要先写入2个头字节表示长度,然后再写入字符串的长度,并且UTF-8中的1个文字长度占用3字节的。

sitemap