Java——普通的IO流(字节流)

一、IO流之字节流

(一)IO流分类:
a:按照数据流向
		输入流	读入数据
		输出流	写出数据
	b:按照数据类型
		字节流 可以读写任何类型的文件 比如音频 视频  文本文件
		字符流 只能读写文本文件
		什么情况下使用哪种流呢?
		如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,就用字符流。其他用字节流。
(二)IO流基类概述和FileOutputStream的构造方法
A:IO流基类概述
	a:字节流的抽象基类:
		InputStream ,OutputStream。
	b:字符流的抽象基类:
		Reader , Writer。
	注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
	如:InputStream的子类FileInputStream。
	如:Reader的子类FileReader。
B:FileOutputStream的构造方法
	由一个案例引出使用IO流写数据,由于字节流先出现就先学习字节输出流基类OutputStream,
	使用具体子类FileOutputStream
	Io流的分类:
	- (1): 按照流向进行划分
 		输入流
 		输出流
- (2): 按照操作的数据类型进行划分
- 字节流
- 字节输入流	InputStream		读
- 字节输出流	OutputStream	写
- 字符流
- 字符输入流 	Reader			读
- 字符输出流	Writer			写
- 
- 需求:	往一个文本文件中写一串数据 Hello,IO
- 分析:
- a: 我们现在操作的是文本文件,所有按照我们的想法,我们优先现在字符流,但是字节流是优先于字符流. 所以先使用字节流
- b: 因为我们要写数据,所以我们应该使用字节流中输出流	OutputStream
- 我们发现OutputStream是一个抽象类,我们不能对其进行直接实例化,而我们需要使用子类对其进行实例化.那么选择哪个子类呢?
- 我们现在操作的是文件所以我们选择的是FileOutputStream

(三)数据输入输出方式1
(1)FileOutputStream写出数据
A: 构造方法
FileOutputStream(File file)
FileOutputStream(String name)
B:案例演示
FileOutputStream写出数据

注意事项:
	创建字节输出流对象了做了几件事情?
	a:调用系统资源创建a.txt文件
  	b:创建了一个fos对象
  	c:把fos对象指向这个文件
	为什么一定要close()?

	a: 通知系统释放关于管理a.txt文件的资源
	b: 让Io流对象变成垃圾,等待垃圾回收器对其回收

(2)FileOutputStream的三个write()方法
A:FileOutputStream的三个write()方法
public void write(int b):写一个字节 超过一个字节 砍掉前面的字节
public void write(byte[] b):写一个字节数组
public void write(byte[] b,int off,int len):写一个字节数组的一部分
B:案例演示: FileOutputStream的三个write()方法
(3)FileOutputStream写出数据实现换行和追加写入

FileOutputStream fos = new FileOutputStream("fos.txt" , true) ;  // 完成追加写入
	
	// 写数据
	for(int x = 0 ; x < 10 ; x++){
		fos.write(("hello" + x).getBytes()) ;
		fos.write("\r\n".getBytes()) ;
	}
	// 释放资源
	fos.close(); 

(4)FileInputStream读取数据一次一个字节
A:案例演示: int read():一次读取一个字节
如果没有数据返回的就是-1
举例:字节流一次读写一个字节复制文本文件
分析:a : 创建字节输入流对象和字节输出流对象

  • b: 频繁的读写操作
  • c: 释放资源
  • 举例2: 字节流一次读写一个字节复制MP3
 * 创建字节输入流对象和字节输出流对象
	FileInputStream fis = new FileInputStream("D:\\a.mp3") ;
	FileOutputStream fos = new FileOutputStream("E:\\a.mp3") ;
	// 频繁的读写操作
	int by = 0 ;		// 用户记录读取到的字节
	while((by = fis.read()) != -1){
		fos.write(by) ;
	}
	// 释放资源
	fos.close() ;
	fis.close() ;          
	一次读写一个字节效率低

(5)FileInputStream读取数据一次一个字节数组

A:案例演示:	int read(byte[] b):一次读取一个字节数组
		返回的int类型的值表示的意思是读取到的字节的个数,如果没有数据了就返回-1
	byte[] bytes = new byte[1024] ;
	int len = 0 ;	// 作用: 记录读取到的有效的字节个数
	while((len = fis.read(bytes)) != -1){
		System.out.print(new String(bytes , 0 , len));
	}
	// 释放资源
	fis.close() ;

(6)FileInputStream读取数据的两种方式比较图解
案例:字节流一次读写一个字节数组复制文本文件

// 创建字节输入流对象和字节输出流对象
	FileInputStream fis = new FileInputStream("D:\\xiaoshuo.txt") ;
	FileOutputStream fos = new FileOutputStream("E:\\xiaoshuo.txt");
	// 一次读取一个字节数组复制文件
	byte[] bytes = new byte[1024] ;
	int len = 0 ;// 作用: 记录读取到的有效的字节个数
	while((len = fis.read(bytes)) != -1){		
		// 写数据
		fos.write(bytes , 0 , len) ;
	}
	// 释放资源
	fos.close() ;
	fis.close() ;

案例2:字节流一次读写一个字节数组复制MP3
(四)数据输入输出方式2
(1)BufferedOutputStream写出数据
A:缓冲思想
字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,
这是加入了数组这样的缓冲区效果,java本身在设计的时候,
也考虑到了这样的设计思想(装饰设计模式后面讲解),所以提供了字节缓冲区流
B:BufferedOutputStream的构造方法
查看API
BufferedOutputStream(OutputStream out)
C:案例演示
BufferedOutputStream写出数据
(2)BufferedInputStream读取数据
A:BufferedInputStream的构造方法
案例3:字节流四种方式复制MP3并测试效率
要求:
通过以下四个代码测试效率。
基本字节流一次读写一个字节
基本字节流一次读写一个字节数组
高效字节流一次读写一个字节
高效字节流一次读写一个字节数组

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计,皆可应用在项目、毕业设计、课程设计、期末/期/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值