Kotlin-写入未指定类型的流的函数



在C++中,有一个ostream的概念。coutostreamofstream也是。通过这种方式,您可以定义一个函数,该函数接受一个ostream并向其写入,这样调用方就可以决定将函数写入到哪里

有没有可能在kotlin中实现同样的效果:定义一个函数来确定它在运行时写入的位置(可能是控制台(?显然,ifwhen语句不起作用。

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

举个简单的例子:

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

  • 或者,如果您想写入stdout,可以直接使用System.out。(这也是OutputStream。(

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

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

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

(在实践中,为了提高效率,您经常将其封装在BufferedOutputStream中。(

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

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

  • 或者,如果您想写入stdout,您可以围绕System.out创建一个OutputStreamWriter

  • 等等。

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


输入也有等效的类:InputStream用于字节流,Reader用于字符流,这两个类都有许多用于不同源的实现。

java和kotlin:中有几个步骤

  1. 从文件、网络或任何其他可以为您提供这些流的资源中获取InputStreamOutputStream
  2. 您可以使用这些来读取或写入它们,这些流最终从底层资源中读取或写入。(例如文件(
  3. 在操作结束时,您需要使用close((方法关闭相应的Streams
  4. 然后,您可以关闭资源,也可以不关闭资源,具体取决于您的用例

我建议您遵循Kotlin文档。

必看";使用";。(这就像Java对资源的尝试(

最新更新