当前位置: 首页 > news >正文

IO流-字节流

1.理解字节流

  • 字节流(InputStream,OutputStream)
    • 字节流是以字节码的形式读取或写出文件数据
    • 字节流是所有流的基础
    • 字节流是以字节码为操作单位所以更适用于操作二进制文件(如:图片文件、音频、视频、压缩包等非文本文件)
    • Java中操作进行字节流操作的两个基础类(InputStream<字节输入流>,OutputStream<字节输出流>)
      • 在实际使用时我们一般使用两个子类实现字节流操作
        • (1) FileInputStream:基于文件的字节输入流
        • (2) FileOutputStream:基于文件的字节输出流
        • (3) BufferedInputStream:带有缓冲区的字节输入流
        • (4) BufferedOutputStream:带有缓冲区的字节输出流

2.实例

2.1.输入流

  • 代码1
  • package 字节流;import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;public class InputStreamDemo {/*** 字节输入流* @param args*/public static void main(String[] args) throws IOException {//创建字节流对象FileInputStream fileInputStream=new FileInputStream("D:\\code\\io-project\\IO流常用方法");//从字节输入流中读取一个字节/*int num=fileInputStream.read();System.out.println(num);System.out.println((char)num);*//*//将读取的字节码放入字节数组中byte[] buf=new byte[3];//字节数组fileInputStream.read(buf);String str=new String(buf);System.out.println(str);*///定义缓冲区byte[] buf=new byte[1024];//表示读取的实际长度int len=-1;while ((len=fileInputStream.read(buf)) !=-1){//将字节码转换为字符串String str=new String(buf,0,len);System.out.println(str);}//关闭 输入流对象,释放所占有的资源fileInputStream.close();}
    }
    
  • 源码2
  • package 字节流;import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;public class InpetStreanDemo1 {public static void main(String[] args) throws IOException {InputStream inputStream=new FileInputStream("E:\\学习笔记\\IO流\\3.字节流.rar");byte[] bytes=new byte[1024];int len=-1;while ((len=inputStream.read(bytes,0,bytes.length))!=-1){String str=new String(bytes,0,len);System.out.println(str);}}
    }
    

2.2输出流

  • 代码
  • package 字节流;import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;public class OutputStreamDemo {/*** 创建字节输出流对象* 如果输出的目标文件存在则向文件中直接写入内容,如果目标文件不存在则新建文件* 字节输出流默认以替换的方式写出数据* 如果需要追加的方式向文件中写入需要再构造方法中加入true参数* @param args* @throws IOException*/public static void main(String[] args) throws IOException {//创建字节输出流对象FileOutputStream outputStream=new FileOutputStream("E:/redme.txt",true);String str="\r\n你好,哈哈哈哈哈";//String str="你好";outputStream.write(str.getBytes());outputStream.close();}
    }
    

2.3文件复制

  • 源码1
  • package 字节流;import java.io.*;public class FileCopy {public static void main(String[] args) throws IOException {File srcFile=new File("E:\\学习笔记\\IO流\\3.字节流.rar");File descFile=new File("D:\\3.字节流.rar");fileCopy(srcFile,descFile);}/*** 文件复制方法* @param srcFile 要复制的源文件* @param descFile 要复制的目标文件*/public static void fileCopy(File srcFile,File descFile) throws IOException {//创建字节输入和输出流InputStream inputStream=new FileInputStream(srcFile);OutputStream outputStream=new FileOutputStream(descFile);//创建一个字节数组作为读取数据的缓冲区byte[] buf=new  byte[1024];int len=-1;//获得当前时间的毫秒数long start=System.currentTimeMillis();//循环读取数据while ((len=inputStream.read(buf,0,buf.length))!=-1){//循环写出到文件中outputStream.write(buf,0,len);//刷新输出流outputStream.flush();}//获得当前时间的毫秒数long end=System.currentTimeMillis();System.out.println("需要的时间"+(end-start)+"毫秒");//关闭输入和输出流inputStream.close();outputStream.close();}
    }
    
  • 源码2

  • package 字节流;import java.io.*;public class FileCopyForBuffer {public static void main(String[] args) throws IOException {File srcFile=new File("E:\\学习笔记\\IO流\\3.字节流.rar");File descFile=new File("D:\\3.字节流.rar");fileCopy(srcFile,descFile);}/*** 文件复制方法* @param srcFile 要复制的源文件* @param descFile 要复制的目标文件*/public static void fileCopy(File srcFile,File descFile) throws IOException {//创建字节输入和输出流InputStream inputStream=new FileInputStream(srcFile);/*** 带有缓冲区的字节流* 该类为一个包装类*/BufferedInputStream bufferedInputStream=new BufferedInputStream(inputStream);OutputStream outputStream=new FileOutputStream(descFile);BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(outputStream);//创建一个字节数组作为读取数据的缓冲区byte[] buf=new  byte[1024];int len=-1;//获得当前时间的毫秒数long start=System.currentTimeMillis();//循环读取数据while ((len=bufferedInputStream.read(buf,0,buf.length))!=-1){//循环写出到文件中bufferedOutputStream.write(buf,0,len);//刷新输出流bufferedOutputStream.flush();}//获得当前时间的毫秒数long end=System.currentTimeMillis();System.out.println("需要的时间"+(end-start)+"毫秒");//关闭输入和输出流bufferedInputStream.close();bufferedOutputStream.close();}
    }
    

http://www.dtcms.com/a/311871.html

相关文章:

  • c++--模板--实例化
  • ARM处理器概述及对比
  • 2025熵密杯 -- 初始谜题 -- Reproducibility
  • 基于落霞归雁思维框架的应用与实践研究
  • 计数组合学7.11(RSK算法)
  • Android动画实现控件形状、大小逐渐过渡
  • 智能制造——解读CMMM评估手册【附全文阅读】
  • DyWA:用于可推广的非抓握操作的动态自适应世界动作模型
  • 硅基计划3.0 学习总结 伍 优先级队列排序初识
  • 【Vue3】Class绑定:从基础到高级的完整指南
  • Web前端实现银河粒子流动特效的3种技术方案对比与实践
  • 【完结篇】华为OpenStack架构学习9篇 连载—— 09 OpenStack编排管理【附全文阅读】
  • 深入 Go 底层原理(三):Goroutine 的调度策略
  • OSPF综合
  • VS Code高效开发指南:快捷键与配置优化详解
  • 深入 Go 底层原理(十二):map 的实现与哈希冲突
  • Mybatis学习之获取参数值(四)
  • 字符串(java不死)
  • c++之基础B(进制转换)(第三课)
  • 详解Python标准库之并发执行
  • AI Agent开发学习系列 - LangGraph(3): 有多个输入的Graph
  • C#多数据库批量执行脚本工具
  • OneCode3.0 核心表达式技术深度剖析:从架构设计到动态扩展
  • 波士顿咨询校招面试轮次及应对策略解析
  • 双机并联无功环流抑制虚拟阻抗VSG控制【simulink仿真模型实现】
  • OneCodeServer 架构深度解析:从组件设计到运行时机制
  • 「iOS」————weak底层原理
  • Conda创建虚拟环境,解决不同项目的冲突!
  • Windows本地使用dify搭建知识库+ollama+deepseek
  • 从零打造大语言模型--处理文本数据