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

目录
相关文章
|
7天前
|
Java
【Java基础】输入输出流(IO流)
Java基础、输入输出流、IO流、流的概念、输入输出流的类层次结构图、使用 InputStream 和 OutputStream流类、使用 Reader 和 Writer 流类
53 1
|
2天前
|
Java 大数据 API
|
7天前
|
Java
JAVA高级部分学习小结(2023.11.4)
JAVA高级部分学习小结(2023.11.4)
|
7天前
|
存储 缓存 Java
Java基础17-读懂Java IO流和常见面试题(二)
Java基础17-读懂Java IO流和常见面试题(二)
19 0
|
7天前
|
存储 Java Unix
Java基础17-读懂Java IO流和常见面试题(一)
Java基础16-读懂Java IO流和常见面试题(一)
19 0
|
12天前
|
算法 Java 测试技术
滚雪球学Java(54):从零开始学习Java中的Math类,轻松解决数学难题
【6月更文挑战第8天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
18 0
滚雪球学Java(54):从零开始学习Java中的Math类,轻松解决数学难题
|
13天前
|
存储 算法 NoSQL
JAVA—IO流知识点总结
JAVA—IO流知识点总结
|
13天前
|
Java
Java线程学习经典例子-读写者演示
Java线程学习经典例子-读写者演示
8 0
|
15天前
|
Java 应用服务中间件
已解决:An error occurred at line: 1 in the generated java file The type java.io.ObjectInputStream canno
已解决:An error occurred at line: 1 in the generated java file The type java.io.ObjectInputStream canno
|
16天前
|
Java
io读两个文件,生成list 排重后写本地文件(Java)
io读两个文件,生成list 排重后写本地文件(Java)

热门文章

最新文章