PrintWriter 如何可以写入字节流,而 BufferedWriter 不能?
How PrintWriter can write to byte stream, but BufferedWriter cannot?
首先,我将提供一段带有注释的代码:
FileOutputStream fos = new FileOutputStream ("test.txt");
//fos IS-A OutputStream as FileOutputStream extends OutputStream
PrintWriter pw = new PrintWriter (fos); //compiles (can take OutputStream)
BufferedWriter bw = new BufferedWriter (fos); //doesn't compile (can't take OutputStream)
//Need to do this:
BufferedWriter bufferedWriter = new BufferedWriter (new OutputStreamWriter (fos)); //compiles
我以为我知道 I/O 流,直到我遇到这个错误。有人可以解释 PrintWriter
如何写入 字节流 ,而 BufferedWriter
不能吗?他们不应该是一样的吗?我一直认为它们是平等的(意思是在内部实现上),但不同之处在于它们拥有的方法。
看来我错了 :) 我是这样看的:BufferedWriter
不能写入字节流,因为它是字符流,这意味着必须有人转换这些字符。这就是为什么我们 'give' OutputStreamWriter
作为从字符流到字节流的 桥梁 。那么,为什么PrintWriter
不需要这个“桥梁”呢。他们不能有一种编码方式来让我们的生活更轻松吗?还是我错过了什么?
So, how come PrintWriter doesn't need this "bridge".
PrintWriter(OutputStream, ...)
构造函数的 javadocs 声明它们是便利构造函数。简而言之,它们提供了一种快速的方法来完成您可以通过其他方式完成的事情。
Couldn't they have a way of coding and make our lives easier?
您现在指的是 BufferedWriter 没有采用 OutputStream
参数的便捷构造函数。
作为一般规则,为 use-cases 提供了便利的构造函数和方法,这些构造函数和方法被认为足够普遍以保证这一点。
在这种情况下,他们可能需要提供许多个方便的构造函数:
BufferedWriter(OutputStream)
使用默认字符集。
BufferedWriter(OutputStream, String)
提供字符集名称
BufferedWriter(OutputStream, Charset)
提供字符集
BufferedWriter(OutputStream, CharsetEncoder)
直接提供字符集编码器
可能还有 4 个用于提供 non-default 缓冲区大小。
我想他们认为这是不合理的。
首先,我将提供一段带有注释的代码:
FileOutputStream fos = new FileOutputStream ("test.txt");
//fos IS-A OutputStream as FileOutputStream extends OutputStream
PrintWriter pw = new PrintWriter (fos); //compiles (can take OutputStream)
BufferedWriter bw = new BufferedWriter (fos); //doesn't compile (can't take OutputStream)
//Need to do this:
BufferedWriter bufferedWriter = new BufferedWriter (new OutputStreamWriter (fos)); //compiles
我以为我知道 I/O 流,直到我遇到这个错误。有人可以解释 PrintWriter
如何写入 字节流 ,而 BufferedWriter
不能吗?他们不应该是一样的吗?我一直认为它们是平等的(意思是在内部实现上),但不同之处在于它们拥有的方法。
看来我错了 :) 我是这样看的:BufferedWriter
不能写入字节流,因为它是字符流,这意味着必须有人转换这些字符。这就是为什么我们 'give' OutputStreamWriter
作为从字符流到字节流的 桥梁 。那么,为什么PrintWriter
不需要这个“桥梁”呢。他们不能有一种编码方式来让我们的生活更轻松吗?还是我错过了什么?
So, how come PrintWriter doesn't need this "bridge".
PrintWriter(OutputStream, ...)
构造函数的 javadocs 声明它们是便利构造函数。简而言之,它们提供了一种快速的方法来完成您可以通过其他方式完成的事情。
Couldn't they have a way of coding and make our lives easier?
您现在指的是 BufferedWriter 没有采用 OutputStream
参数的便捷构造函数。
作为一般规则,为 use-cases 提供了便利的构造函数和方法,这些构造函数和方法被认为足够普遍以保证这一点。
在这种情况下,他们可能需要提供许多个方便的构造函数:
BufferedWriter(OutputStream)
使用默认字符集。BufferedWriter(OutputStream, String)
提供字符集名称BufferedWriter(OutputStream, Charset)
提供字符集BufferedWriter(OutputStream, CharsetEncoder)
直接提供字符集编码器
可能还有 4 个用于提供 non-default 缓冲区大小。
我想他们认为这是不合理的。