首页 > 其他分享 >I/O(输入/输出)——字节流和字符流

I/O(输入/输出)——字节流和字符流

时间:2024-08-22 20:26:47浏览次数:14  
标签:字符 读取 输出 int InputStream 输入 字节

一、字节流

        在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制的形式(也就是字节)存在的。为字节的输入输出流提供的一系列流统称为字节流。在JDK中提供了两个抽象类InputStream和OutputStream,它们是字节流的顶级父类。

1.InputStream

        InputStream是I/O流包中用来读取文件的,并且计算机中的数据大多数都保存在硬盘中,因此不可避免的需要操作文件中的数据。但InputStream并不是一个接口,而是一个抽象类,它是所有输入流的父类。

InputStream的常用方法:

  1. int read() 从输入流读取一个8位的字节,把它转换为0~255之间的整数,并返回这一整数
  2. int read(byte[ ] b) 从输入流读取若干字节,把它们保存到参数b指定的字节数组中,返回的整数表示读取字节的数目
  3. int read(byte[ ] b, int off, int len) 从输入流读取若干字节,把它们保存到参数b指定的字节数组中,off指定字节数组开始保存数据的起始下标,len表示读取的字节数目
  4. void close() 关闭此输入流并释放与该流关联的所有系统资源

2.OutputStream

        OutputStream是JDK提供的最基本的输出流,也是抽象类,是所有输出流的父类,如果使用此类,则首先必须通过子类实例化对象。

OutStream的常用方法:

  1. void write(int b) 向输出流写入一个字节
  2. void write(byte[ ] b) 把参数b指定的字节数组的所有字节写入到输出流
  3. void write(byte[ ] b, int off, int len) 将指定字节数组b中从偏移量off开始的len个字节写入输出流
  4. void flush() 刷新此输出流并强制写出所有缓冲的输出字节
  5. void close() 关闭此输出流并释放与该流关联的所有系统资源

3.字节缓冲流

        I/O提供两个带缓冲的字节流,分别是BufferedInputStream和BufferedOutputStream,它们的构造方法中分别接收InputStream和OutoutStream类型的参数作为对象,在读写数据时提供缓冲功能。

二、字符流

        InputStream和OutputStream类在读写文件时操作的都是字节,如果希望在程序中操作字符,则应该使用JDK提供的字符流。同字节流一样,字符流也有两个抽象的顶级父类,分别是Reader(字符输入流)和Writer(字符输出流)。用法类似于字节流,不过字节流是基于字节的,而字符流是以字符为单位的,每次读取一个或一组字符。

        同时,字符流也提供了带缓冲的包装流,即BufferReader(对字符输入流进行包装)和BufferWriter(对字符输出流进行包装)。需要注意的是,在BufferReader中有一个特别重要的方法readLine(),该方法用于一次读取一行文本,当读到回车符'\r'或换行符'\n'时会将读到的字符作为一行的内容返回

        需要注意的是,在写入字符时,只有当缓冲区内部写满时或调用close()方法时,缓冲区中的字符才会被写入目标文件。

        有时字节流和字符流之间也需要进行转换。JDK 提供了两个类可以将字节流转换为字符流,它们分别是 InputStreamReader 和 OutputStream Witer。

  1.  InputSreamReader 是Reader 的子类,它可以将一个字节输人流转换成字符输人流,方便直接读取字符
  2. OutputStreamWriter 是Writer的子类,它可以将一个字节输出流转换成字符输出流,方便直接写入字符。为了提高读写效率,可以通过 InputStreamReader 和 OutputStream Writer 实现转换工作

 

 

标签:字符,读取,输出,int,InputStream,输入,字节
From: https://blog.csdn.net/m0_62823517/article/details/141429479

相关文章

  • Latex引用两个文献——使用连字符
    Latex引用两个文献——使用连字符问题描述解决办法问题描述在一些国内期刊正文中引用参考文献时,如果是2个或者2个以上的连续数字时应该用连字符连起来,例如:“[1,3]”,“[4-5]”,但是使用常见的方法(\usepackage[numbers,sort&compress]{natbib})并不会对2个文献引用起作用......
  • Java 字符串转换成罗马数字
    键盘录入一个字符串要求1:长度为小于等于9要求2:只能是数字将内容变成罗马数字下面是阿拉伯数字跟罗马数字的对比关系Ⅰ-1,Ⅱ-2,Ⅲ-3,Ⅳ-4,Ⅴ-5,Ⅵ-6,Ⅶ-7,Ⅷ-8,Ⅸ-9注意点:罗马数字里面是没有0的如果键盘录入的数字包含0,可以变成""(长度为0的字符串)packagetest;......
  • AP5174内置PWM调节LED灯亮度输入5-100V车灯驱动IC 手电筒与车灯方案
    产品描述AP5174是一款效率高,稳定可靠的LED灯恒流驱动控制芯片,内置高精度比较器,固定关断时间控制电路,恒流驱动电路等,特别适合大功率LED恒流驱动。AP5174采用ESOP8封装,散热片内置接SW脚,通过调节外置电流检测的电阻值来设置流过LED灯的电流,支持外加电压线性调光,最大......
  • WPF 设备输入事件封装
    本文主要介绍WPF应用对鼠标输入、触摸屏触笔以及触摸事件的封装之前有简单说明设备输入类型 WPF屏幕点击的设备类型-唐宋元明清2188-博客园(cnblogs.com)1、鼠标- 通过Mouse相关的事件参数MouseButtonEventArgs中的数据,e.StylusDecice==null表示没有触摸设备,所以设备为......
  • day8字符串:344.反转字符串|541. 反转字符串II|卡码网:54.替换数字
    344.ReverseStringclassSolution{//extrao1spacepublicvoidreverseString(char[]s){intleft=0;intright=s.length-1;while(left<right){chartemp=s[left];s[left]=s[right];......
  • 微软发布 Phi-3.5 系列模型,涵盖端侧、多模态、MOE;字节 Seed-ASR:自动识别多语言丨 RTE
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • 触摸输入故障深度剖析:tiptsf.dll修复的高级策略详解
    针对tiptsf.dll文件丢失或损坏导致的触摸输入问题,可以采取以下专业修复步骤:1.安全模式启动:首先,尝试重启计算机进入安全模式。这有助于防止加载可能干扰修复过程的第三方服务。2.系统还原点:检查是否有最近的系统还原点。通过“控制面板”->“系统”->“系统保护”->......
  • 编写类A03,实现数组的复制功能copyArr,输入旧数组,返回一个新数组,元素和旧数组一样
    1publicclassHomework04{2//编写一个main方法3publicstaticvoidmain(String[]args){45int[]oldArr={10,30,50};6A03a03=newA03();7int[]newArr=a03.copyArr(oldArr);8//遍历newArr,验证9......
  • str(int(value)).zfill(3) 是一个 Python 表达式,主要用于将数字转换为字符串并在字符
    str(int(value)).zfill(3)是一个Python表达式,主要用于将数字转换为字符串并在字符串前面补零,确保字符串的长度至少为3个字符。分解解释int(value):这个部分首先将value转换为整数。这假定value是一个可以被解释为整数的数值(如'42'或42.0)。如果value是一个浮点......
  • 字符串值提取工具-10-java 执行表达式引擎
    值提取系列字符串值提取工具-01-概览字符串值提取工具-02-java调用js字符串值提取工具-03-java调用groovy字符串值提取工具-04-java调用java?Janino编译工具字符串值提取工具-05-java调用shell字符串值提取工具-06-java调用python字符串值提取工具-07-java调......