IO流

字节流

  读取数据是文件的二进制数据,不会对这个二进制进                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               行任何处理,直接以二进制的方式。

 字符流读取数据是以字符为单位的,字符串也是读取到二进制数据,然后会把二进制数据进行编码或者解码。

 字符流=字节流+解码·编码

输入流(Inputstream)  数据的读入

使用步骤:

1:目标(确定读取文件位置)

2:建立传输的通道

3:读取文件的数据

4:关闭资源;

使用字节流写入中文:

字节流之所以写入中文是因为它借助字符串的getbyte()z这个方法,一个一个字节的读取文件转为char,会出现乱码,是因为在gbk编码中占用两个字节。

字符输出流:

FileWrite的内部也是维护了一个1024字符的字符数组。当写入数据到磁盘的时候,实际上这个类是先将这个数据写入到了内部维护的1024个字符的数组中。

以下三种情况才会真的将内部维护的数组中的数据写入到磁盘。

1 数据存满了,也就是1024个字符。

2 FileWrite的对象,调用了flush方法。

3 或者关闭资源的时候,直接存储。


输出流   outputstream     Fileoutputstream

将内存数据写入到硬盘中

使用步骤:

1:找到目标文件(写入文件的位置)

2:建立数据传输通道(FileoutputStream)

3:传输数据  把数据转化为字节数组,然后用Fileoutputstream这个类的对象写入到文件。

4:关闭资源

 当使用Fileoutputstream的Write(int b)来写入数据的时候,接受数据类型虽然是int类型但是实际上只能给写出一个字节的数据(8个位的数据)是把int类型的低八位数据写出,舍弃前面的24位数据。

使用Fileoutputstream类写入数据到磁盘的时候,如果目标存在,那么写入的时候会先清空文件中原本的数据,然后在写入数据(会覆盖原本的内容)。

如果我们不想覆盖这个已经存在的文件的内容,那么我们可以用Fileoutputstream(File file.boolean.append)构造输出流对象。

   import java.io.BufferedInputstream;

   import java.io.FileinputStream;

   import java.io.File;

   import java.io.IOException;

public class Demo

 public static void main(Sting[]args)throws IOException{

                 readTest(); 

}

    public static void readTset()throws IOException{

                File file=new file("E:/dm");//找到目标文件;

                FileInputstream fileInputstream=new FileInputstream(file);//建立数据传输通道

               BufferedInputstream bufferedInputstream=new BufferedInputstream(fileInputstream);//准备用BufferInputstream读取数据

                  byte[]b=new byte[1024];//读取缓冲数组的方式

                        int length=0;

              while((length=bufferedInputstream.read(b))!=-1){

                          System.out.print(new String(b,0,length));

}

        BufferedInputStream.close();//关闭资源


}

}

缓冲输入流

 Object:InputStream     FielInputStream       BufferedInputstream

缓冲输入流

 Object:OutputStream   Fileoutstrem            BufferedOutputStream

因为读取文件的数据,使用缓冲数组,结合循环的方式,效率更高。

缓冲输入字节流更高效的读取文件。

底层实现:它的底层是维护了一个8kb大小的字节数组来实现更高效率的读取数据。

使用步骤:

1找到目标文件(要读取的数据)

2建立数据传输通道

3建立缓冲输入字节流对象来读取数据

4 关闭资源

实际上BufferedInputstream这个类的对象,本身并不具备读取数据和关闭资源的能力,是靠构造这个对象提供给他们的FileInputStrem对象实现的。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值