Java 学习(23)---(IO流之字节流)

简介: 字节流IO 用于在设备间进行数据传输的操作1.分类: 字节流    |-- 字节输入流InputStreamint read(): 一次读取一个字节int read(byte[] bys):...

字节流

IO 用于在设备间进行数据传输的操作

1.分类:

 字节流

    |-- 字节输入流

InputStream

int read(): 一次读取一个字节

int read(byte[] bys): 一次读取一个字节数组

|--FileInputStream

|--BufferedInputStream

    |-- 字节输出流

OutputStream

void write(int by): 一次写一个字节

void write(byte[] bys,int index,int len): 一次写一个字节数组的一部分

|--FileOutputStream

|--BufferedOutputStream

 

字符流

    |-- 字符输入流

Reader

int read(): 一次读取一个字符

int read(char[] chs): 一次读取一个字符数组

|--InputStreamReader

|--FileReader

|--BufferedReader

String readLine(): 一次读取一个字符串

    |-- 字符输出流

Writer

void write(int ch): 一次写一个字符

void write(char[] chs,int index,int len): 一次写一个字符数组的一部分

|--OutputStreamWriter

|--FileWriter

|--BufferedWriter

void newLine(): 写一个换行符

void write(String line): 一次写一个字符串

注意:

a:如果我们没有明确说明按照什么分,默认按照数据类型分。                    

b: 除非文件用 windows  自带的记事本打开我们能够读懂, 才采用字符流, 否则建议使用字节流。

2.FileOutputStream 写出数据

A:操作步骤

    a:创建字节输出流对象

    b: 调用 write() 方法

    c:释放资源

B:API

构造方法

FileOutputStream(File file)

FileOutputStream(File file ,booleanappend) FileOutputStream(String name)

FileOutputStream(String name ,booleanappend) ;

如果第二个参数为 true ,则将字节写入文件末尾处,而不是写入文件开始处。

成员方法

public void write(int b): 写一个字节

public void write(byte[] b): 写一个字节数组

public void write(byte[] b,int off,int len) :写一个字节数组的一部分

public void close(); 关闭此文件输出流并释放与此流有关的所有系统资源。

C:代码体现:

//	创建字节输出流对象
// FileOutputStream(File file)
// File file = new File("fos.txt");
// FileOutputStream fos = new FileOutputStream(file);
// FileOutputStream(String name)
FileOutputStream fos = newFileOutputStream("fos.txt");
/*
*创建字节输出流对象了做了几件事情:
*A:	调用系统功能去创建文件
*B:	创建 fos 对象
*C:	把 fos 对象指向这个文件
*/
//	写数据
fos.write( fos.write("hello,IO".getBytes());
fos.write( fos.write(""java"".getBytes());
//	释放资源
//	关闭此文件输出流并释放与此流有关的所有系统资源。
fos.close();
/*
*为什么一定要	close()	呢 ?
*A:	让流对象变成垃圾,这样就可以被垃圾回收器回收了
*B:	通知系统去释放跟该文件相关的资源
*/
//java.io.IOException: Stream Closed
//fos.write("java".getBytes());

加入异常处理的代码:

FileOutputStream fos = null	;
try	{
// fos = new FileOutputStream("z:\\fos4.txt");
fos	=	newFileOutputStream("fos4.txt""fos4.txt");
fos .write("java"	.getBytes());
}	catch	(FileNotFoundException	e ) { e.printStackTrace();
}	catch	(IOException e) {
e.printStackTrace();
}	finally	{
//		如果 fos 不是 null	,才需要 close() if	(  fos	!=	null	) {
//	为了保证 close()	一定会执行,就放到这里了
try	{
fos .close();
}	catch	(IOException e) { e.printStackTrace();
}
}
}

C:要注意的问题  

  a:创建字节输出流对象做了几件事情 ?

1.调用系统功能去创建文件     2. 创 建   fos  对 象C: 把fos 对象指向这个文件

  b: 为什么要 close()?

1. 让流对象变成垃圾,这样就可以被垃圾回收器回收了

2.通知系统去释放跟该文件相关的资源

c:如何实现数据的换行 ?

写入换行符号即可

fos.write("\r\n".getBytes());

d: 如何实现数据的追加写入 ?

new FileOutputStream("fos3.txt", true);

3.FileInputStream 读取数据

A:操作步骤

1.创建字节输入流对象  2.调用 read() 方法 3.释放资源

B: API

构造方法

FileOutputStream(File file) FileOutputStream(String name)

成员方法

int read(): 一次读取一个字节

int read(byte[] b): 一次读取一个字节数组

代码:复制

FileInputStream fis	=	newFileInputStream( "fos.txt" );

//	方式 1
int	by = 0;
while	((by=fis.read())!=-1) {
System.	out .print((	char ) by );
}
//	方式 2
byte  [] bys = newbyte	[1024];
int	len = 0;
while	((len=fis.read(bys))!=-1) {
System.	out .print(	new String( bys ,0,	len ));
}
fis.close();

案例:

//	高效字节流一次读写一个字节数组:
publicstaticvoid method4(String srcString, String destString) throws IOException { BufferedInputStream bis = newBufferedInputStream( new FileInputStream (srcString));
newBufferedOutputStream(new FileOutputStream(destString));
byte [] bys = newbyte [1024];
int	len = 0;
while	((len = bis.read(bys)) != -1) { bos.write(bys, 0, len);
}
bos.close();
bis.close();
}

//	高效字节流一次读写一个字节:
publicstaticvoid		method3(String srcString, String destString) throws	IOException {
BufferedInputStream bis =	newBufferedInputStream(	new FileInputStream( srcString));
BufferedOutputStream bos =	newBufferedOutputStream( new FileOutputStream(destString));
int	by = 0;
while	((by = bis.read()) != -1) { bos.write(by);
}
bos.close();
bis.close();
}
//	基本字节流一次读写一个字节数组
publicstaticvoid		method2(String srcString, String destString) throws	IOException {
FileInputStream fis =	new FileInputStream(srcString); FileOutputStream fos =		new FileOutputStream(destString); byte  [] bys =	newbyte [1024];
int	len = 0;
while	((len = fis.read(bys)) != -1) { fos.write(bys, 0, len);
}
fos.close();
fis.close();
}
//	基本字节流一次读写一个字节
publicstaticvoid		method1(String srcString, String destString) throws	IOException {
FileInputStream fis =	new FileInputStream(srcString); FileOutputStream fos =		new FileOutputStream(destString); int	by = 0;
while	((by = fis.read()) != -1) { fos.write(by);
}
fos.close();
fis.close();
}

4.字节缓冲区流

通过定义数组的方式确实比以前一次读取一个字节的方式快很多, 所以, 看来有一个缓冲区还是非常好的。

既然是这样的话,那么, java 开始在设计的时候,它也考虑到了这个问题,就专门提供了带缓冲区的字节类。

这种类被称为:缓冲区类 (高效类 )

A:BufferedOutputStream B:BufferedInputStream

目录
相关文章
|
10天前
|
消息中间件 前端开发 Java
java学习路径
【4月更文挑战第9天】java学习路径
17 1
|
1月前
|
安全 Java 程序员
学习Java类加载机制
在Java的世界里,每一个类或者接口,在经历编译器后,都会生成一个个.class文件。
18 0
|
10天前
|
设计模式 前端开发 安全
Java是一种广泛使用的编程语言,其学习路径可以大致分为以下几个阶段
【4月更文挑战第9天】Java是一种广泛使用的编程语言,其学习路径可以大致分为以下几个阶段
15 1
|
1天前
|
JavaScript Java 测试技术
基于Java的精品课程在线学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的精品课程在线学习系统的设计与实现(源码+lw+部署文档+讲解等)
16 1
|
1天前
|
JavaScript Java 测试技术
基于Java的中文学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的中文学习系统的设计与实现(源码+lw+部署文档+讲解等)
16 0
|
7天前
|
Java 存储
键值之道:深入学习Java中强大的HashMap(二)
键值之道:深入学习Java中强大的HashMap
10 0
键值之道:深入学习Java中强大的HashMap(二)
|
9天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
25 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
13天前
|
安全 前端开发 Java
Java Web开发知识点学习总结
Java Web开发涉及Java基础、Servlet、JSP、数据库操作(SQL+JDBC)、MVC设计模式、Spring框架、Hibernate ORM、Web服务(SOAP&RESTful)、安全认证(HTTP Basic/Digest/OAuth)及性能优化(缓存、异步、负载均衡)。
15 3
|
15天前
|
存储 Java
探索 Java IO 流的多种实现方式
【4月更文挑战第4天】Java IO 流是处理输入输出的关键组件,包括文件流(FileInputStream/FileOutputStream)、字符流(FileReader/FileWriter)、缓冲区流(BufferedInputStream/BufferedOutputStream)、转换流(InputStreamReader/OutputStreamWriter)、数据流(DataInputStream/DataOutputStream)、对象流(ObjectInputStream/ObjectOutputStream)、随机访问文件流(RandomAccessFile)和管道流。
|
26天前
|
Java 关系型数据库 MySQL
Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
【2月更文挑战第33天】Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
46 2