登录不老阁

 
注册成功

二呆

diamond@tongleer.com

岂能尽如人意,但求无愧我心。

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

2017-6-11 二呆 Android 530观看

上一节介绍了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字节的。

« 【Android】学习札记第7章之IO流三及XML初步 | 【Android】学习札记第7章之异常及IO初步»

  • 觉得很赞 (0)
  • 打赏
  • X
    打赏
    • 微信
    • QQ红包
    • 支付宝


    用微信扫一扫

    您的鼓励将是站长及作者前行的动力,谢谢打赏
    (若二维码有误可举报)

发表评论:

快乐贰呆的关注更多 >

小草窝博客

博主是一名天朝的学生,喜欢折腾各种奇怪的语言,喜欢探索未知的事情

图床

微博图床

搜索

标签

Genymotion Button HTML 腾讯视频 Win10 火腿肠意面 MIUI 主题编辑器 Android emlog pjax EventBus AndroidStudio 快捷键 倒计时 工具类 eclipse javascript 励志语录 自定义Dialog Demo java 热伤风 redis RabbitMQ ZeroMQ ActiveMQ Kafka Jafka php 鸡蛋饼 直播 继承 面向对象 工厂模式 AutoCompleteTextView GridView RadioButton ToggleButton Android开发入门 EditText CheckBoxes 控件 TimePicker AnalogClock DigitalClock ProgressBar SeekBar RatingBar UI控件 Spinner ScrollView Adapter 单元测试 Dialog 自定义对话框 Android项目 布局 Android视频 Java4Android Android开发教程 学习札记 基本数据类型 运算符和流程控制 流程控制循环语句 数组 数组二 二维数组 安卓基础 安卓监听器 表格布局 帧布局 网格布局 Android异常 AndroidIO XML XML解析 用户登录 数据存储 SQLite内部数据存储 Unity3D教程 Linux subversionSVN TortoiseSVN ViewPager Fragment 预加载 Android实战开发 唯一识别码 锁屏 Activity CheckBox ListView 增删改查 图片回收处理 内存溢出 仿2列商品列表 AndroidNDK eclipse插件 jni开发 jni调用 so文件 Androidmk配置 Flash 绘制图形 苹果 图标 变形工具 滤镜 Flash特效 简单薄餐 Flash滤镜 Flash动画 Android开发 天气预报 醋溜白菜 香菇烩豆腐 微波豆腐蒸蛋 速成凉拌豆腐 杜子建 穷根 男装搭配 黄帝内经 大蒜洋葱粥 情商密码 中华药粥 交际红人 小白菜萝卜粥 每日一笑 完美国际 故梦 一卷情长 Ukulele 白熊音乐 零基础 指弹 教程 白桦树娃娃 新加坡 网红美食 海南鸡饭

公众号

同乐儿

链接更多 >