更新时间:2022-07-26 10:55:10 来源:动力节点 浏览1064次
以下是 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将数据发送到的目的地。
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()
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基础教程,里面有更丰富的知识等着大家去学习,希望对大家能够有所帮助。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习