我正在设计一个库,在这个库中,类应该能够将内部内容转换为文本。我应该使用哪个类:OutputStream还是Writer?它们之间的主要区别是什么(在我的例子中)?
public interface Memento {
void save(OutputStream stream);
void save(Writer writer);
}哪个?
发布于 2011-03-08 02:50:44
OutputStream是面向字节的流。您编写的任何文本都必须使用某种编码(最常见的是ISO-8859-1或UTF-8)编码为字节。Writer是面向字符的流,它可以在内部将字符编码为字节,也可以不在内部将字符编码为字节,这取决于它要写入的内容。
编辑如果您正在设计库,那么如果您提供了一个要向其中写入文本的OutputStream-oriented接口,那么您确实应该为客户端类提供控制要使用的编码的能力。
发布于 2011-03-08 02:50:04
文本?Writer。它的目的是处理字符,尊重编码。
流/字节数组- OutputStream。在原始字节上工作,没有字符、编码、字符串等概念。
发布于 2020-05-24 22:20:39
1)在许多情况下,最好是重写toString()或提供类似的方法来转换...将内部结构转换为文本。对于用户来说,这种方法优点是灵活性。例如,如果此方法的使用者可以:
这在某些情况下可能是不利的,例如,当文本表示相对较大(如100MB),并且有许多请求同时产生这样的对象时。这可能需要过多的资源(CPU、RAM)。在这种情况下,直接写入流或写入器可能是优选。
2)如果你期望你的对象可以在许多不同的上下文中使用,那么为提供、保存到流和保存到编写器都是有意义的。例如,HttpServletResponse同时提供了getWriter()和getOutputStream(),这样每个人都可以决定哪个更适合自己的特定情况。或者杰克逊的JsonFactory为文件、OutputStream和编写器提供了* createGenerator()*方法,给了消费者更多的自由。
https://stackoverflow.com/questions/5223760
复制相似问题