Java IO输入输出流

本文详细介绍了Java中的IO流概念,包括字节流和字符流的分类,以及输入流和输出流的相关类和方法。重点讨论了InputStream、OutputStream、Reader、Writer四大基类及其常见子类的使用,提供了代码实例展示如何进行文件的复制操作。
摘要由CSDN通过智能技术生成

Java IO流的概念

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流。
IO是指对数据流的输入和输出,也称为IO流,IO流主要分为两大类,字节流和字符流。字节流可以处理任何类型的数据,如图片,视频等,字符流只能处理字符类型的数据。
IO是In和Out,即输入和输出,指的是程序与外部设备间的数据传递。Java是用流(Stream)的方式来进行数据操作,这里就称为IO流,操作流的对象都在IO包上。

常用的字节流

FileInputStream、FileOutputStream、ObjectInputStream、ObjectOutputStream。

IO流的分类

1.按数据流的方向:输入 ,输出
输出:把程序(内存)中的内容输出到磁盘、光盘等存储设备中
输入:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中

2.按处理数据单位:字节流、字符流。
  
字节流:可以用于读写二进制文件及任何类型文件。
字符流:可以用于读写文本文件。

3.按功能:节点流、处理流。
  
节点流:可以从或向一个特定的地方(节点)读写数据。如FileInputStream,FileReader。
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader。处理流的构 造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

输入流

InputStream:字节输入流基类,是所有的字节输入流的父类,它是一个抽象类。
FileInputSream:文件输入流。它通常用于对文件进行读取操作。
FilterInputStream :过滤流。作用是为基础流提供一些额外的功能。装饰者模式中处于装饰者,具体的装饰者都要继承它,所以在该类的子类下都是用来装饰别的流的,也就是处理类。
BufferedInputStream:缓冲流。对处理流进行装饰,增强,内部会有一个缓存区,用来存放字节,每次都是将缓存区存满然后发送,而不是一个字节或两个字节这样发送。效率更高。
DataInputStream:数据输入流。它是用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。
PushbakInputStream:回退输入流。java中读取数据的方式是顺序读取,如果某个数据不需要读取,需要程序处理。PushBackInputStream就可以将某些不需要的数据回退到缓冲中。
ObjectInputStream:对象输入流。用来提供对“基本数据或对象”的持久存储。通俗点讲,也就是能直接传输对象(反序列化中使用)。
PipedInputStream:管道字节输入流。它和PipedOutputStream一起使用,能实现多线程间的管道通信。
SequenceInputStream:合并输入流。依次将多个源合并成一个源。
StringBufferInputStream:字符相关流。已经过时不多说。
ByteArrayInputStream:字节数组输入流,该类的功能就是从字节数组(byte[])中进行以字节为单位的读取,也就是将资源文件都以字节的形式存入到该类中的字节数组中去,我们拿也是从这个字节数组中拿。

inputStream字节输入流

字节输入流基类,是所有的字节输入流的父类,它是一个抽象类。
InputStream 是所有的输入字节流的父类,它是一个抽象类。
ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。PipedInputStream 是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。
ObjectInputStream 和所有FilterInputStream的子类都是装饰流(装饰器模式的主角)。意思是FileInputStream类可以通过一个String路径名创建一个对象,FileInputStream(String name)。而DataInputStream必须装饰一个类才能返回一个对象,DataInputStream(InputStream in)

inputStream字节输入流常用方法:
		// int available()  返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。 
		// void close()  关闭此输入流并释放与该流关联的所有系统资源。 
		// void mark(int readlimit)  在此输入流中标记当前的位置。 
		// boolean markSupported() 测试此输入流是否支持 mark 和 reset 方法。 
		// abstract  int read()  从输入流中读取数据的下一个字节。 
		// int read(byte[] b)  从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。 
		// int read(byte[] b, int off, int len)  将输入流中最多 len 个数据字节读入 byte 数组。 
		// void reset()  将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。 
		// long skip(long n)  跳过和丢弃此输入流中数据的 n 个字节。 
inputStream字节输入流代码实例:
public static void main(String[] args) throws IOException {
   

        File f1=new File("d:/来自一个爱你的表白.txt");//file对象
        InputStream in = new FileInputStream(f1);//新建输入流从f1开始流
        int n ;
        Long f1length= f1.length();//获取文件长度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的甘蔗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值