栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

IO流(二)[输入、输出流]

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

IO流(二)[输入、输出流]

目录

IO流的分类

字节流和字符流的区别

输入字节流 InputStream

输出字节流 OutputStream

输入字符流FileReader

 常用的节点流

 代码展示

总结


 

IO流的分类
  • 根据处理数据类型的不同分为:字符流和字节流
  • 根据数据流向不同分为:输入流和输出流

四大基流:

  1. 字节输出流OutPutStream
  2. 字节输入流InPutStream
  3. 字符输出流Writer
  4. 字符输入流Reader

四大基流都是抽象类: 其他流都是继承于这四大基流的
我们不能创建四大基流的对象,只能创建其子类对象

字节流和字符流的区别
  • 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节
  • 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据
  • 字节流:一次读入或读出是8位二进制
  • 字符流:一次读入或读出是16位二进制

输入字节流 InputStream
  • InputStream 是所有的输入字节流的父类,它是一个抽象类
  • ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据
  • PipedInputStream 是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍
  • bjectInputStream 和所有FilterInputStream

输出字节流 OutputStream
  • OutputStream 是所有的输出字节流的父类,它是一个抽象类
  • ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据
  • PipedOutputStream 是向与其它线程共用的管道中写入数据
  • ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流
    总结
  • 输入流:InputStream或者Reader:从文件中读到程序中
  • 输出流:OutputStream或者Writer:从程序中输出到文件中

输入字符流FileReader

字符输入流的处理类为Reader。Reader类的定义结构如下:

public abstract class Reader implements Readable, Closeable

Reader也是一个抽象类,如果要进行文件的读取,也要用到它的间接子类FileReader。

Reader中也提供了一些方法,读取文件内容:

public int read() throws IOException
public int read(char cbuf[]) throws IOException
abstract public int read(char cbuf[], int off, int len) throws IOException;

举例:使用Reader读取

public class TestStream {
    public static void main(String[] args) {
        String directory = "D:"+File.separator+"test1"+File.separator
                +"java"+File.separator+"hh.txt";
        //File和本地文件系统相关联
        File file = new File(directory);
        try (Reader reader = new FileReader(file);){
            char[] buff = new char[1024];
            int len = -1;
            while ((len = reader.read(buff))!= -1){
                System.out.println(new String(buff, 0, len));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 常用的节点流
  • 父 类 :InputStream 、OutputStream、 Reader、 Writer
  • 文 件 :FileInputStream 、 FileOutputStrean 、FileReader 、FileWriter 文件进行处理的节点流
  • 数 组 :ByteArrayInputStream、 ByteArrayOutputStream、 CharArrayReader 、CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)
  • 字符串 :StringReader、 StringWriter 对字符串进行处理的节点流
  • 管 道 :PipedInputStream 、PipedOutputStream 、PipedReader 、PipedWriter 对管道进行处理的节点流

 代码展示

InputStream类是字节输入流的抽象类,是所有字节输入流的父类

字节流:(InputStream:)针对二进制文件:

 --InputStream 
 --FileInputStream
 --BufferedInputStream 
 --ObjectInputStream OutputStream
 --FileOutputStream
 --BufferedOutputStream
 --ObjectOutputStream

Reader类是字符输入流的抽象类,所有字符输入流的实现都是它的子类 

字符流:针对文本文件,读写容易发生乱码现象,在读写时应指定编码集为UTF-8

-- Writer
-- BufferedWriter
-- OutputStreamWriter Reader
-- BufferedReader
-- InputStreamReader
-- PrintWriter/PrintStream

总结
  • 输入流:InputStream或者Reader:从文件中读到程序中;
  • 输出流:OutputStream或者Writer:从程序中输出到文件中;
  • 所有的字符都需要通过内存缓冲来进行处理。如果字符流不关闭,数据就有可能保存在缓存中并没有输出到目标源。这种情况下必须强制刷新。
  • 只有处理中文时会用到字符流,其他一般都使用字节流。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839310.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号