首页 > 解决方案 > Kotlin - 写入未指定类型流的函数

问题描述

在 C++ 中,有一个ostream. cout是一个ostream,就像一个ofstream。通过这种方式,您可以定义一个接受 ostream 并写入它的函数,以便调用者可以决定他希望函数写入的位置。

是否有可能在 kotlin 中实现相同的效果:定义一个函数来确定它在运行时写入的位置(可能是控制台)?显然iforwhen陈述不算数。

标签: c++kotlinstreamstdout

解决方案


Kotlin(和 Java)有两个等价物:OutputStream字节流和Writer字符流。它们都是抽象类,有许多具体的子类写到不同的地方。

以更简单的情况为例:

  • 如果要将字节数据写入文件,可以创建一个FileOutputStream写入给定文件名的实例。(这实现了OutputStream。)

  • 或者如果你想写入标准输出,你可以System.out直接使用。(这也是一个OutputStream。)

  • 或者如果你有一个网络Socket,你可以调用它的getOutputStream()方法,它会给你一个OutputStream.

  • 或者有一些实现可以写入字节数组、管道、CORBA 流,或者……</p>

因此,如果您有一些使用 的代码OutputStream,您可以为它提供任何这些类的实例,并且在调用OutputStream.write()时它将写入适当的位置。

(在实践中,您经常将其包装在 aBufferedOutputStream中以提高效率。)

a 也非常相似Writer,但在这些情况下,您通常必须告诉它使用哪种字符编码。(尽管在许多情况下您可以将其保留为平台默认值,通常是 UTF-8。)

  • 因此,如果要将字符数据写入文件,可以创建一个FileWriter写入给定文件名的实例。

  • 或者,如果您想写入标准输出,您可以创建一个OutputStreamWriteraround System.out

  • 等等。

同样,如果您的代码被编写为接受 any Writer,那么无论它写入何处,它都会工作,并且有一个BufferedWriter用于提高效率的包装器。


输入也有等效的类:InputStream字节流和Reader字符流,两者都有针对不同源的大量实现。


推荐阅读