首页 课程 师资 教程 报名

Java输出流介绍

  • 2022-07-26 10:55:10
  • 1088次 动力节点

Java 输出流子类

以下是 Java OutputStream类 的一些著名子类:

字节数组输出流

文件输出流

管道输出流

缓冲输出流

过滤器输出流

数据输出流

打印流

对象输出流

输出流和目的地

JavaOutputStream通常连接到某些数据目的地 - 如Java IO 概述中所述,如文件、网络连接、管道、内存缓冲区等。Java IO 概述文本中也对此进行了更详细的解释。的OutputStream数据目的地是所有写入 的数据OutputStream最终结束的地方。

写(字节)

该write(byte)方法是用来写一个单一byte的Java OutputStream。an的write()方法OutputStream接受一个 int,其中包含要写入的字节的字节值。int仅写入值的第一个字节。其余的被忽略。

的子类OutputStream可能有替代write()方法。例如, DataOutputStream允许您使用相应的方法等编写 Java 原语,如 int、long、float、double、booleanwriteBoolean()等writeDouble()。

这是一个OutputStream write()例子:

OutputStream outputStream = new FileOutputStream("c:\data\output-text.txt");
而(有更多数据()){
  int 数据 = 获取更多数据();
  outputStream.write(数据);
}
outputStream.close();

个while循环。退出while循环的条件是方法的返回值hasMoreData()。的实现hasMoreData()没有显示,但假设如果有更多数据要写入,则返回 true,否则返回 false。

在 while 循环内,该示例调用该方法getMoreData()以获取要写入 的下一个数据OutputStream,然后将该数据写入OutputStream. while 循环继续,直到hasMoreData()返回 false。

注意:为清楚起见,此处跳过了正确的异常处理。要了解有关正确异常处理的更多信息,请转到Java IO 异常处理。

写(字节[])

JavaOutputStream必须使用 write 方法,使您能够一次将字节数组写入OutputStream。这些写入方法是:

write(byte[] bytes)

write(byte[] bytes, int offset, int length)

该方法将数组中的 write(byte[] bytes)所有字节写入. byteOutputStream

该write(byte[] bytes, int offset, int length)方法将从字节数组的length索引开始的字节写入. offsetOutputStream

这两种方法都返回写入 的实际字节数OutputStream,如果不是整个数组,或者length可以按请求写入字节。

OutputStream下面是使用这两种写入方法中的第二种将 字节数组写入 Java 的示例:

OutputStream outputStream = new FileOutputStream("/usr/home/jakobjenkov/output.txt");
byte[] sourceBytes = ... // 从某处获取源字节。
int bytesWritten = outputStream.write(sourceBytes, 0, sourceBytes.length);

此示例将指示OutputStream尝试将 sourceBytes数组中的所有字节写入OutputStream. 执行此代码后, bytesWritten变量将包含实际写入 OutputStream.

写入性能

将字节数组写入 Java OutputStream 比一次写入一个字节要快。加速可能非常显着 - 高达 10 倍或更多。因此,建议尽可能使用这些write(byte[]) 方法。

您获得的确切加速取决于运行 Java 代码的计算机的底层操作系统和硬件。加速取决于内存速度、硬盘速度和缓冲区大小或网卡速度和缓冲区大小等问题,具体取决于OutputStream将数据发送到的目的地。

通过 BufferedOutputStream 进行透明缓冲

OutputStream您可以通过将其包装在 Java BufferedOutputStream中 来获得写入 Java 的字节的透明缓冲。所有写入 的字节BufferedOutputStream 都将首先缓冲在BufferedOutputStream. 当缓冲区已满时,缓冲区会OutputStream立即全部刷新到底层。OutputStream这是将 Java 包装在 a 中的示例BufferedOutputStream:

整数缓冲区大小 = 8 * 1024;
输出流输出流 =
    新的缓冲输出流(
          new FileOutputStream("c:\data\output-file.txt"), bufferSize);

您可以BufferedOutputStream在我的BufferedOutputStream 教程中了解更多信息。

冲洗()

JavaOutputStream的flush()方法将写入的所有数据刷新OutputStream 到底层数据目标。例如,如果OutputStream是 aFileOutputStream 那么写入 的字节FileOutputStream可能还没有完全写入磁盘。即使您的 Java 代码已将数据写入FileOutputStream. 通过调用flush(),您可以确保任何缓冲的数据都将被刷新(写入)到磁盘(或网络,或任何其他目的地OutputStream)。OutputStream下面是通过调用Java 方法刷新写入 Java 的数据的示例flush():

outputStream.flush();

关闭一个输出流

将数据写入 Java 后OutputStream,您应该关闭它。你 OutputStream通过调用它的close()方法来关闭它。这是关闭 Java 的示例OutputStream:

OutputStream outputStream = new FileOutputStream("c:\data\output-text.txt");
而(有更多数据()){
    int 数据 = 获取更多数据();
    outputStream.write(数据);
}
outputStream.close();

hasMoreData()和 的具体实现getMoreData()被省略了,但它们对于理解这个例子的原理并不是非常重要。重要的是,一旦循环结束while,并且您将数据写入. OutputStreamclose()OutputStream

上面的例子虽然不是完全健壮的。如果write()方法抛出异常,该close()方法将永远不会被调用。该异常将使程序退出上述代码所在的任何方法。

相反,您应该使用 Java try with resources构造来关闭OutputStream. 下面是一个OutputStream使用 try-with-resources 构造关闭 Java 的示例:

尝试(OutputStream outputStream = new FileOutputStream("c:\data\output-text.txt")) {
    而(有更多数据()){
        int 数据 = 获取更多数据();
        outputStream.write(数据);
    }
}

try退出块后, 会自动调用的close()方法,因为 是 在块的括号内声明的 。即使从块内部抛出异常, 在异常传播到调用堆栈之前仍会调用该方法。 OutputStreamOutputStreamtrytryclose()

将 OutputStream 转换为 Writer

JavaOutputStream是基于字节的流。您可以使用Java OutputStreamWriter类将 a 转换OutputStream为基于字符的字符。这是将 Java 转换为using 的示例: WriterOutputStreamWriterOutputStreamWriter

OutputStream outputStream = new FileOutputStream("c:\data\output.txt");
编写器 outputStreamWriter = new OutputStreamWriter(outputStream);
outputStreamWriter.write("Hello World");

以上就是关于“Java输出流介绍”,大家如果对此比较感兴趣,想了解更多相关知识,不妨来关注一下动力节点的Java基础教程,里面有更丰富的知识等着大家去学习,希望对大家能够有所帮助。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交