关于IO流

FileInputStream:用于从文件读取字节数据。BufferedInputStream:对进行缓冲,提高读取效率。DataInputStream:用于读取基本数据类型(如intdouble)的二进制数据。
摘要由CSDN通过智能技术生成

一、IO流(上)

1、IO:Input(输入:读)和Output(输出:写)

 "输入"是从外界到程序中的方向,是我们程序用于获取外界信息的过程,是"读"的过程
 "输出"是从程序到外界的方法,是我们程序向外界发送信息的过程,是"写"的过程

注:硬盘只存二进制

2、输入输出流
 //java.io.InputStream与OutputStream
 * 输入流与输出流   
 * 这里的流相当于是程序与外界相连的一根管道,用于传输数据.而数据就是字节(2进制)
 //InputStream和OutputStream是两个超类,抽象类.
   java中实际用于读写数据的流都继承自他们.
3、文件流
 //java.io.FileInputStream和FileOutputStream//覆盖模式
 * 这两个流就继承自InputStream和OutputStream
 * 这两个流是用于连接我们程序和文件之间的管道,读写文件数据(读写硬盘)

1248码

4、OutputStream()----write()和close()
 //OutputStream上定义的方法:void write(int d)
 通过当前输出流向目标位置写出1个字节,写出给定int值对应2进制的"低八位"
①write()---向文件中写入一个字节
②close()---流使用完毕要关闭
 FileOutputStream fas=new FileOutputStream("fas.txt");
 for(int i=0;i<26;i++){
     fas.write(97+i);
 }
 System.out.println("输出完毕");
 fas.close();//流使用完毕后要关闭
 文件输出流可以创建一个文件
5、InputStream()----read()、write()和currentTimeMillis()
①read()读取文件字节
②write()
③System.currentTimeMillis()--获取当前系统时间的毫秒数
 System.currentTimeMillis():返回当前系统时间,时间是一个long值,表示当前系统的UTC时间
 //UTC:世界协调时间
 //计算标准:自1970-01-01 00:00:00到表达的时间所经过的毫秒,常用于计算时间间隔或者用于生成唯一的时间戳。
 FileInputStream fis=new FileInputStream("./image.png");
 FileOutputStream fos=new FileOutputStream("./image_cp.png");
 int d;
 /*while (true){
     d= fis.read();
     if(d==-1){
         break;
     }
     fos.write(d);
 }*/
 long start=System.currentTimeMillis();
 while ((d=fis.read())!=-1){
     fos.write(d);
 }
 long end=System.currentTimeMillis();
 System.out.println("复制完毕"+(end-start)+"ms");
 fis.close();
 fos.close();
6、块读写操作、复制
 //一组一组字节的读写称为:块读写
 提高每次读写的数据量,减少实际读写的次数可以提高读写效率
 int read(byte[] data)//InputStream定义了块读方法 
     //一次性读取给定字节数组data总长度的字节量并存入到该数组中。
     返回值表达实际读取到了多少字节。如果返回值为-1表达流读取到末尾了
 void write(byte[] data,int offset,int len)
   //一次性将给定字节数组data从下标offset处开始的连续len个字节写出
 若data总长度连续读取3个字节,读取到倒数第二次只剩一个字节时
 data:{11101100,11001111,00110011}
       本次读取  |--上次的旧数据---|
 最后一次读取没有数据返回-1,结束//len会根据读取的字节个数进行改变
 //复制文件会比源文件大的原因:最后一次读取时含上一次的旧数据全部输出
①int read(byte[] data)
②void write()
 void write(byte[] data)
 //一次性将给定字节数组data中的所有字节写出
 void write(byte[] data,int offset,int len)
 //一次性将给定字节数组data从下标offset处开始的连续len个字节写出
 FileInputStream fis=new FileInputStream("./image.png");
 FileOutputStream fos=new FileOutputStream("./image_cp2.png");
 byte[] data=new byte[1024*10];
 int len=0;
 long start=System.currentTimeMillis();
 while ((len=fis.read(data))!=-1){
     //fos.write(data);//复制文件会比源文件大
   fos.write(data,0,len);//解决方法
 }
 long end=System.currentTimeMillis();
 System.out.println("复制完毕!耗时:"+(end-start)+"ms");
 fis.close();
 fos.close();
7、向文件中写入文本数据
getBytes(StandardCharsets.UTF_8)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值