OutputStream与InputStream类似,都是抽象类,该抽象类最重要的方法是void write(int b)
:
public abstract void write(int b) throws IOException;
该方法写入一个字节到输出流,根据传入的int值传入字节,每次只传一个字节,即int最低8位表示字节的部分。
OutputStream还有两个方法,一个与InputStream相同的close()方法,另一个是flush()方法。
flush()方法的作用是:将缓冲区内的字节输出到目的地。
OutputStream的缓冲区:计算机中输出一个字节和输出n个字节所用的时间是一样的,因此如果每次只输出一个字节,会造成资源浪费,建立缓冲区,将输出的字节先存入缓冲区,待缓冲区慢或者需要释放时对缓冲区进行释放将字节传入目的地。
FileOutputStream
相同的OutputStream的子类是FileOutputStream。
public void writeFile() throws IOException {
OutputStream output = new FileOutputStream("out/readme.txt");
output.write(72); // H
output.write(101); // e
output.write(108); // l
output.write(108); // l
output.write(111); // o
output.close();
}
相同的FileOutputStream也有一个一次输入多个字符的方法,void write(byte[] b);
注意:getByte()方法返回的是字节。
public static void writeOutput(String str,String filePath) throws IOException {
try(OutputStream outputStream = new FileOutputStream(filePath);){
outputStream.write(str.getBytes("UTF-8"));
}
}
同样write()方法也是阻塞的。
ByteArrayOutputStream
相同的,ByteArrayOutputStream可以作为测试类,来构造OutputStream。
public class Main {
public static void main(String[] args) throws IOException {
byte[] data;
try (ByteArrayOutputStream output = new ByteArrayOutputStream()) {
output.write("Hello ".getBytes("UTF-8"));
output.write("world!".getBytes("UTF-8"));
data = output.toByteArray();
}
System.out.println(new String(data, "UTF-8"));
}
}