Java中将IO流进行分类,可分为字节流(字节输出流:OutputStream和字节输入流:InputStream)和字符流(字符输出流:Writer和字符输入流:Reader)
【
流的概念和作用(Thinking in Java):流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象
流的本质:数据传输,根据数据传输特性将流抽象为各种类
】
OutputStream类
该类别的类决定了输出所要去往的目标:字节数组、文件或管道。(Thinking in Java)。
| ByteArrayOutputStream | 在内存中创建缓冲区,所有送往“流”的数据都要放置在此缓冲区 |
| FileOutputStream | 用于将信息写至文件 |
| PipedOutPutStream | 任何写入其中的信息都回自动作为相关PipedInputStream的输出。实现“管道化概念” |
| FilterOutputStream | | 抽象类,作为“装饰器”的接口|
OutputStream中的三个基本的写法:
abstract void write(int b):往输出流中写入一个字节。
void wirte(byte[] b):往输出流中写入数组b中的所有字节。
void write(byte[] b,int off,int len):往输出流中写入数组b中从偏移量off开始的len个字节的数据。
其他方法:
void flush():刷新输出流,强制缓冲区中的输出字节被写出。
void close():关闭输出流,释放和这个流相关的系统资源。
OutputStream的子类ByteArrayOutputStream:
API说明:此类实现了一个字节输出流,其中数据被写入到字节数组中,缓冲区在数据写入时会自动增长。
构造方法:
ByteArrayOutputStream() //默认缓冲区域是32个字节
ByteArrayOutputStream(int size) //指定缓冲区大小
ByteArrayOutputStream流方法:
write(int b)
//写入指定的字节到此字节输出流中
write(byte b[], int off, int len)
//从指定数组的下标off开始写入len个字节到该输出流中
writeTo(OutputStream out)
//将此字节输出流的内容写入到指定的输出流中
reset()
//重置此字节输出流,废弃此前存储的数据
toByteArray()
//创建一个新分配的字节数组,大小和内容是当前输出流的拷贝。
toString()
//将缓冲区的内容转换为字符串
实例:(本人小白,没有实际用过此类)
public static void main(String[] args) throws IOException {
ByteArrayOutputStream bOutputStream=new ByteArrayOutputStream(12);
while(bOutputStream.size()!=10) {
bOutputStream.write(System.in.read());
}
byte b[]=bOutputStream.toByteArray();
System.out.println("Print the content");
for (int i = 0; i < bOutputStream.size(); i++) {
System.out.println((char)b[i]+" ");
}
}
-------output--------
abcdefghigklmn
Print the content
a
b
c
d
e
f
g
h
i
g
主要介绍:
OutputStream的子类FileOutputStream:
构造方法:
FileOutputStream(File file)
FIleOutputStream(String name)
public static void main(String[] args) throws IOException {
FileOutputStream outputStream=new FileOutputStream("D:/a.txt");
outputStream.write("hello".getBytes());
//往文件中写入hello
outputStream.write(97);
//文件中写入a,由于ASCLL码
byte[] bys= {'b','c','d','e','f'};
outputStream.write(bys,1,3);
//文件中写入cde
outputStream.close();
}
-------output-------
helloacde
此外,上面的写法每次运行都会覆盖之前的a.txt,如果想要在文件后面追加内容,需要在FileOutputStream中加入第二个参数true,这样每次运行将会在文件后面追加内容。
FileOutputStream outputStream=new FileOutputStream("D:/a.txt",true);
文件中的换行符为"\r\n",例如:
for (int i = 0; i < 5; i++) {
outputStream.write("a".getBytes());
outputStream.write("\r\n".getBytes());
}
-----ouput------
a
a
a
a
a
PipedOutputStream以及FilterOutputStream将用单独博客去探究。