常用输出字节流OutputStream

OutputStream的作用是接收输出字节,并将这些字节发送到某个接收器。OutputStream表示输出字节流的所有类抽象父类,必须通过它的子类来进行构造。以下是常用的几个子类:

1、字节数组作为输出源——ByteArrayOutputStream

ByteArrayOutputStream实现一个输出流,其中的数据被写入一个byte数组。缓存区会随着数据的不断写入而自动增长,并可实现toByteArray()和toString()获取数据。

下面是一个应用ByteArrayOutStream输出的实例

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class TestByteArrayOutputStream {
    public static void main(String[] args) {
        // 创建输出流
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        // 写入数据
        byte[] buf = new byte[3];
        buf[0] = 100;
        buf[1] = 101;
        buf[2] = 102;
        try {
            output.write(buf);
            // 从输出流中输出
            System.out.print(output.toString());
            // 关闭流
            output.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

2、文件作为输出源——FileOutputStream

文件输入流FileOutputStream是用于将数据写入File的输出流。FileOutputStream用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用FileWriter。

创建FileOutputStream对象的方法有四种:

FileOutputStream(File file);                    //向File对象文件中写入数据的文件输出流
FileOutputStream(String name);                  //向指定名称的文件中写入数据的输出文件流
FileOutputStream(File file,boolean append);     //向File对象文件中写入数据的文件输出流
FileOutpuStream(String name,boolean append);   //向指定名称的文件中写入数据的输出文件流
//参数append如果是true,则表示对象文件进行追加,默认为False,表示直接从文件开始处写入字节数据。

以下是一个写入指定文件的实例:

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestFileOutputStream {
    public static void main(String[] args) {
        try {
            // 创建文件输出流
            FileOutputStream output = new FileOutputStream("D:/demo/test.txt");
            // 写入数组数据
            byte[] buf = new byte[3];
            buf[0] = 100;
            buf[1] = 101;
            buf[2] = 102;
            output.write(buf);
            // 关闭流
            output.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

3、对象作为输出源——ObjectOutputStream

ObjectOutputStream将对象的基本数据类型和图形写入OutputStream,可以使用ObjectInputStream读取(重构)对象。通过在流上使用文件可以实现对象的持久储存。

writeObject()方法可以用于将对象写流中。所有对象(包括String和数组)都可以通过writeObject写入。可将多个对象写入流中。必须使用与写入对象时相同类型和顺序从相应的ObjectInputStream中都会对象。还可以使用DataOutput中适当方法将基本数据类型写入流中。还可以使用writeUTF()方法写入字符串。

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Date;

public class TestObjectOutputStream {
    public static void main(String[] args) {
        try {
            // 创建文件输出流
            FileOutputStream fos = new FileOutputStream("D:/demo/test.tmp");
            // 创建响应的对象输出流
            ObjectOutputStream output = new ObjectOutputStream(fos);
            // 写入输出流数据
            output.writeInt(1314);
            output.writeObject("一生一世");
            output.writeObject(new Date());
            // 关闭流
            output.close();
            fos.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

 4、缓存输出流——BufferedOutputStream

BufferedOutputStream是从FileOutputStream中继承下来的,他与BufferedInputStream相对应,主要为输出流做缓存,如:

OutputStream s = new BufferedOutputStream(new FileOutputStream("foo"));

由于BufferedOutputStream是3缓存数据的,所以必要时,需要使用flush()方法强制将缓存中的数据真正的写入输出流中。

以下是一个将文件输出流转化成缓存输出流,再输出的过程

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestBufferedOutputStream {
    public static void main(String[] args) {
        try {
            // 创建文件流
            FileOutputStream fos = new FileOutputStream("D:/demo?test.txt");
            // 创建缓冲输出流
            BufferedOutputStream output = new BufferedOutputStream(fos);
            // 写入数据
            byte[] buf = new byte[3];
            buf[0] = 100;
            buf[1] = 101;
            buf[2] = 102;
            output.write(buf);
            // 关闭输出流
            output.close();
            fos.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

 

posted @ 2017-08-24 14:57  一木林森  阅读(1637)  评论(0编辑  收藏  举报