c++ - Kotlin - 写入未指定类型流的函数
问题描述
在 C++ 中,有一个ostream
. cout
是一个ostream
,就像一个ofstream
。通过这种方式,您可以定义一个接受 ostream 并写入它的函数,以便调用者可以决定他希望函数写入的位置。
是否有可能在 kotlin 中实现相同的效果:定义一个函数来确定它在运行时写入的位置(可能是控制台)?显然if
orwhen
陈述不算数。
解决方案
Kotlin(和 Java)有两个等价物:OutputStream
字节流和Writer
字符流。它们都是抽象类,有许多具体的子类写到不同的地方。
以更简单的情况为例:
如果要将字节数据写入文件,可以创建一个
FileOutputStream
写入给定文件名的实例。(这实现了OutputStream
。)或者如果你想写入标准输出,你可以
System.out
直接使用。(这也是一个OutputStream
。)或者如果你有一个网络
Socket
,你可以调用它的getOutputStream()
方法,它会给你一个OutputStream
.或者有一些实现可以写入字节数组、管道、CORBA 流,或者……</p>
因此,如果您有一些使用 的代码OutputStream
,您可以为它提供任何这些类的实例,并且在调用OutputStream.write()
时它将写入适当的位置。
(在实践中,您经常将其包装在 aBufferedOutputStream
中以提高效率。)
a 也非常相似Writer
,但在这些情况下,您通常必须告诉它使用哪种字符编码。(尽管在许多情况下您可以将其保留为平台默认值,通常是 UTF-8。)
因此,如果要将字符数据写入文件,可以创建一个
FileWriter
写入给定文件名的实例。或者,如果您想写入标准输出,您可以创建一个
OutputStreamWriter
aroundSystem.out
。等等。
同样,如果您的代码被编写为接受 any Writer
,那么无论它写入何处,它都会工作,并且有一个BufferedWriter
用于提高效率的包装器。
输入也有等效的类:InputStream
字节流和Reader
字符流,两者都有针对不同源的大量实现。
推荐阅读
- python - 有没有办法将长度分成几乎相等的部分,但在 Python 中将每个部分调整为最接近的 1/32?
- r - 在闪亮的不同选项卡上使用相同的输出 ID
- python - Groupby 两列,求和,计数并在单独的列中显示输出值(熊猫)
- python - google.cloud.bigquery.Client() 忽略提供的范围,导致在获取驱动器凭据时权限被拒绝
- flutter - 出现错误:进程已完成,退出代码为 1。在 github 操作中
- javascript - Discord.js 拥抱命令如何 ping 被拥抱的消息作者和用户
- javascript - 即使使用 .then(),Javascript 中的 .toArray() 也会返回 undefined
- javascript - 如果不传递参数,数组映射如何工作?
- web - 当用户输入错误密码时,我是否应该在后端验证 google reCaptcha(V2 不可见)
- python - 为什么 OpenCV 和 scikit-image 的 Laplace 方差非常不同?