Java IO流

本文深入解析Java中的IO流概念,包括字节流和字符流的区别,数据传输过程,以及常见流类如InputStream、OutputStream、FileReader和FileWriter的使用方法。通过实例演示了如何使用这些流进行文件的读写操作。

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。它的特性是进行数据传输;

IO流流程套路就是: 输入流(读取) + 缓冲流 + 输出流(写入)

IO流分为

字节流:InputStream和OutputStream是java中可以按照最小字节单位读取的流,即每次读写一个字节,字节流是直接连接到输入源的流。

字符流:是以字符为单位进行数据处理的IO流。本质其实就是基于字节流读取时,去查找指定的码表。

区别

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

在这里插入图片描述

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

ByteArrayInputStream、StringBufferInputStream、FileInputStream是三种基本的输入流,他们分别从数组、StringBuffer、和本地文件中读取数据。

PipedInputStream是从与其它线程共用的管道中读取数据,

OutputStream(字节输出流) 是所有的输出字节流的父类,是抽象类。

ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。

PipedOutputStream 是向与其它线程共用的管道中写入数据。

ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。

字符流和上面差不多

注意字符串只有字符流能读写: StringReader、 StringWriter

补充:
数据流: DataInputStream 、DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来。

转换流:InputStreamReader 、OutputStreamReader实现字节流和字符流之间的转换。

简单的例子:

字节流

public static void main(String []args){
			FileInputStream in=null;
			FileOutputStream out=null;
			BufferedInputStream  bufin = null;
			BufferedOutputStream  bufout = null;
			try {
				in=new FileInputStream("/Users/oneway/Winter/hhh/ALinks.txt");//读
				bufin =new  BufferedInputStream(in);//缓冲
				out=new FileOutputStream("/Users/oneway/Winter/hhh/TextLinks.txt");//写
				bufout =new  BufferedOutputStream(out);//写缓冲
				
				byte[] b = new byte[1024]; //每次读取的字节
				int len;
				//读取数据
				while((len = bufin.read(b)) != -1){
					//写入数据到缓冲区
					out.write(b, 0, len);
					//从缓冲区写出数据
					out.flush();
				}
				in.close();
				out.close();
				System.out.println("文件已复制");
			} catch (Exception e) {
				System.out.println("文件复制错误");
				e.printStackTrace();
			} 
			
		}

字符流

public static void main(String []args){
			FileReader reader = null;
			FileWriter writer = null;
			try {
				reader = new FileReader("/Users/oneway/Winter/hhh/ALinks.txt");
				writer =new FileWriter("/Users/oneway/Winter/hhh/TextLinks.txt");
				 int i =0;
				 while((i=reader.read()) != -1) {
					 writer.write(i);
				 }
				reader.close();
				writer.close();
				System.out.println("文件已复制");
			} catch (Exception e) {
				System.out.println("文件复制错误");
				e.printStackTrace();
			} 
			
		}```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值