理解几个最基础的流
字节流输入:inputStream
字节输出流:outputStream
字符输入流:Reader
字符输出流:Writer
文件对象:File
RandomAccessFile(随机文件操作):一个独立的类,直接继承至Object.它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。
输入流想要转换为文件,则需要构建一个文件输入流,并且构建一个文件输出流,和一个文件对象;将输入流的数据读到某个字节数组中,然后用文件输出流进行输出..
这样就存在本地文件了,不能直接想着把输入流转换成文件,没有这样的构造器,有的能实现的话也是在本地某个地方用这个输入流在本地写了个临时文件出来.
InputStream inputStream = image.getBinaryStream();
FileOutputStream fileOutputStream = new FileOutputStream("33aaa.jpg");
//inputStream.read(b, off, len),每次尽量从输入流中读取len个字节,但是不够的话就有多少读多少。每次读取自后,指针自动向后移动读取的字节位数。off表示相对当前指针还要往前多少位
int off = 0;
int len = 1024;
byte[] b = new byte[1024];
while ((len = inputStream.read(b, off, len)) != -1) {
fileOutputStream.write(b,0,len);
}
inputStream.close();
fileOutputStream.close();
java.io.File类的使用
IO原理及流的分类
输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中
流的分类
按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)
按数据流的流向不同分为:输入流,输出流
按流的角色的不同分为:节点流,处理流
节点流可以从一个特定的数据源读写数据
处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能,比如缓冲流。
文件流
FileInputStream / FileOutputStream / FileReader / FileWriter
缓冲流
BufferedInputStream / BufferedOutputStream /
BufferedReader / BufferedWriter
缓冲流的使用
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class BufferIoDemo {
public static void main(String[] args) {
try {
String src = "E:\\节点流和处理流.png";
String desc = "E:\\节点流和处理流2.png";
InputStream inputStream = new FileInputStream(new File(src));
OutputStream outputStream = new FileOutputStream(new File(desc));
BufferedInputStream bis = new BufferedInputStream(inputStream);
BufferedOutputStream bos = new BufferedOutputStream(outputStream);
byte[] b = new byte[1024];
int off = 0;
int len = 1024;
while ((len = bis.read(b, off, len)) != -1) {
bos.write(b, off, len);
}
bos.flush();
bos.close();
bis.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
转换流
InputStreamReader / OutputStreamWriter
标准输入/输出流
打印流(了解)
PrintStream / PrintWriter
数据流(了解)
DataInputStream / DataOutputStream
对象流 —-涉及序列化、反序列化
ObjectInputStream / ObjectOutputStream
随机存取文件流
RandomAccessFile