说到java IO流,我们用的最多的就是文件的输入流和输出流。那么,FileInputStream就是从文件中读取数据的流,FileOutputStream就是往文件中写数据的流。判断文件是否读到结尾用read()==-1来判断。
当然,也分为字节输入输出流和字符输入输出流。字符输入输出流与字节输入输出流有相同的功能,但传送数据的方式不一样,字节流以字节为单位传送数据,可以使任何类型的数据,例如文本、音频、视频、图片等。字符流以字符为单位传送数据,只能传送文本类型的数据。使用字符输入输出流的好处是,当读取中文时不会出现乱码问题,而使用字节输入输出流时,却不能保证这一点。
今天我不说字节流和字符流,因为感觉都是常用的,不会轻易忘记。今天讲三种流:字节字符转换流、内存操作流、打印流
一.字节字符转换流
java.io.InputStreamReader;
java.io.OutputStreamWriter;
二.内存操作流
定义:除了文件之外,IO操作也可以发生在内存中,发生在内存中的操作流称为内存流。
文件流的操作里面一定会产生一个文件数据
那么,我现在就是需要进行IO处理,但是又不希望产生文件,这种情况下就可以使用内存作为操作终端。
简单写一下对文件流和内存操作流的理解:
1、 以文件操作为例,是以文件作为终端的
(1)读取的时候:程序利用InputStream从文件中读取
(2)输出的时候:程序利用OutputStream输出,输出到文件
2、以内存操作为例,以内存作为终端
(1)程序通过InputStream把内容给内存
(2)程序要想从内存中取出来可以通过OutputStream把内容从内存中读取出来
package SocketIO;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class ByteArrayDemo {
public static void main(String[] args) throws IOException {
String str = "这是内存操作流";
ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes()); //将内容传入内存
ByteArrayOutputStream out = new ByteArrayOutputStream();//把内容从内存输出
int temp = 0;
while((temp=in.read())!=-1){
out.write(temp);
}
System.out.println(out.toString());
in.close();
out.close();
}
}
结果:
三、打印流
打印流是输出信息最方便的类,注意包含字节打印流PrintStream和字符打印流PrintWriter。打印流提供了非常方便的打印功能,可以打印任何类型的数据信息,例如:小数,整数,字符串。
package SocketIO;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
public class PrintDemo {
public static void main(String[] args) {
File file = new File("G:\\test.txt");
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
PrintWriter pw = null;
try {
pw = new PrintWriter(new FileOutputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
int a = 11;
pw.println("你好:");
pw.printf("欢迎来学习打印流%d", a);
pw.flush();
pw.close();
}
}
打印流好处:
通过定义的构造方法可以发现,直接接收OutputStream类的实例。与OutputStream相比起来,PrintStream可以更方便的输出数据,相当于把OutputStream类重新包装了一下,使之输出更方便。
结果: