IO-FileInputStream,块读写,缓冲流,对象流,字符流

流动的是字节(2进制数据).

读入,写出

1.读取方向(输入--读取数据 从外界到程序的方向,读取数据)

(输出--写出数据 从程序到外界的方向,发送数据)

2.节点流 (低级流,节点流的另一端是明确的,是实 际读写数据的流,读写一定是建立在节点流基础上进行 的. )

处理流(高级流,处理流不能独立存在,必须连接 在其他流上,目的是当数据流经当前流时对数据进行加 工处理来简化我们对数据的该操作.)

FileOutputStream fos = new FileOutputStream("./demo.dat");

        -----void write(int d);

                向文件中写入1个字节,写入的内容是给定 的int值对应的2进制的"低八位"

        int值 :                    write(1)   write(2)

        二进制  :               :00000000 00000000 00000000 00000001

        demo.dat文件内容: 00000001 00000010

FileInputStream fis =new FileInputStream("fos.dat");

        -----int read();

                读取一个字节,并一int型返回。返回的整 数中读取的字节部分在该整数2进制的最后8位上          

                  如果返回值为整数-1,则表示流读取到了末 尾。对于读取文件而言就是EOF(end of file 文件末尾)

          fos.dat文件内容:      00000001   00000011          

    第一次调用read()      ^^^^^^^^^

返回int值时,二进制样子:00000000 00000000 00000000 00000001    补充24个0  读取字节

返回的int值d就是上述内容

   第二次调用read()

   第三次调用read()   到文件末尾,返回int值时,二进制样子:   32个1表示-1

块读写的文件复制

原理:

        通过提高每次读写的数据量,减少实际读写的次数,可以提高读写效率.

        单字节读写是一种随机读写形式。而一组一组字节的读 写是块读写形式

int read(byte[] data)

        一次性从文件中读取给定的字节数组总长度的字节量, 并存入到该数组中。

        返回值为实际读取到的字节量。若返回值为-1则表示读 取到了文件末尾.

void write(byte[] data)

        一次性将给定的字节数组所有字节写入到文件中
void write(byte[] data,int offset,int len)

        一次性将给定的字节数组从下标offset处开始的连续len 个字节写入文件

String提供方法:

byte[] getBytes(String charsetName) 

         -----将当前字符串转换为一组字节

        参数为字符集的名字,常用的是UTF-8。 其中中文字3字 节表示1个,英文1字节表示1个

        "UTF-8"   国标编码。英文每个字符占1个字节, 中文每个字符占2个字节 

        "GBK" 内部是unicode编码,在这个基础 上不同了少部分2进制信息作为长度描述                  英文每个字符占1字节                  中文每个字符占3字节
 

String(byte[]data,int offset,int len,String charsetName)          

        -----将给定的字节数组从下标offset处开始的 连续len个字节按照指定的字符集转换为字符串 

缓冲流:高级流  加快读写效率

java.io.BufferedOutputStream和 BufferedInputStream.

        缓冲流是一对高级流,作用是提高读写数据的效率.
        缓冲流内部有一个字节数组,默认长度是8K.缓冲流读写数 据时一定是将数据的读写方式转换为块读写来保证读写效率.

void flush() 

        -----将缓冲流的缓冲区中已缓存的数据一次性写 出

        注:频繁调用该方法会提高写出的次数降低 写出效率。但是可以换来写出              数据的即时性

        缓冲流的close操纵中会自动调用一次 flush,确保所有缓存的数据会被写出
 

对象流

java.io.ObjectOutputStream和ObjectInputSteam

1.类要实现 Serializable 接口

2.有个private static final long serialVersionUID=? L;

对象流是一对高级流,在流连接中的作用是进行对象的 序列化与反序列化。
对象序列化:将一个java对象按照其结构转换为一组字节 的过程
对象反序列化:将一组字节还原为java对象(前提是这组字 节是一个对象序列化得到的字节)
 

Object readObject();

        该方法会进行对象的反序列化,如果对象流 通过其连接的流读取的字节分析并非           是一个java对象时,会抛出异 常:ClassNotFoundException 

字符流

        java.io.Reader和Writer是所有字符流的超类,它 们和字节流的超类是平级关系. 

        Reader和Writer是两个抽象类,里面规定了所有字符 流都必须具备的读写字符的相关方法. 

        字符流最小读写单位为字符(char),但是底层实际还是 读写字节,只是字符与字节的转换工作由字符流完成. 

  int read() ******************

        读取一个字符,返回的int值实际上表示的 是一个char(低16位有效).如果返回的  int值表示的是-1则说明EOF 

int d = isr.read(); 
char c = (char)d; 

转换流(要设置字符集)

        java.io.InputStreamReader和OutputStreamWriter

        它们是字符流非常常用的一对实现类同时也是一对高级 流,实际开发中我们不直接操作它们,但是它们在流连接中 是非常重要的一环.
 

  int read() ******************

        读取一个字符,返回的int值实际上表示的 是一个char(低16位有效).如果返回的  int值表示的是-1则说明EOF 

int d = isr.read(); 
char c = (char)d; 

 

 缓冲字符流

缓冲字符输出流:java.io.PrintWriter 

        -----java.io.BufferedWriter和BufferedReader

        缓冲字符流内部也有一个缓冲区,读写文本数据以块读写 形式加快效率.并且缓冲流有一个特别的功能:可以按行读 写文本数据.
         
java.io.PrintWriter具有自动行刷新的缓冲字符输出流,实 际开发中更常用.它内部总是会自动连接BufferedWriter 作为块写加速使用.

PrintWriter的自动行刷新功能 

         如果实例化PW时第一个参数传入的是一个流,则此时可 以再传入一个boolean型的参数,此值为true时就打开 了自动行刷新功能。 

         每当我们用PW的println方法写出一行字符串后会自动 flush.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值