通用java输出库或模式

flvtvl50  于 2021-07-05  发布在  Java
关注(0)|答案(5)|浏览(507)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

5年前关门了。
改进这个问题
我正在从一个java应用程序中编写一组数据,最终用户可以使用这些数据到文件、控制台或任意侦听器。最好允许用户指定他们希望如何使用这些数据。人们对这类问题采取了什么方法,有没有好的开源解决方案?我可以看到一些简单的东西,比如使用log4j和不同的附加器等等。。。

pgpifvop

pgpifvop1#

解决方案取决于写入数据的特定接口。例如,写入应该是同步的还是异步的?写入错误应该如何传递。。。作为例外还是通过侦听器回调机制?要写入的数据的格式是什么(例如,顺序文本数据)。
如果没有更多的信息,就不可能提供更好的解决方案,但是我要说的是,将数据写入多个位置的一个常见抽象是使用java.io类( InputStream / OutputStream 或者 Reader / Writer ).

093gszye

093gszye2#

你说的是java应用程序内部的接口吗?
在这种情况下,只需提供 InputStream / Reader 从中读取数据或接受 OutputStream / Writer 你把你的数据写在上面。
如果您正在谈论与外部程序的通信,那么请执行unix工具长期以来所做的操作:
stdin 写信给 stdout 这样用户就可以随心所欲:
将其他命令的输出导入到代码中
将文件内容导入命令
通过键盘输入命令
通过管道将命令输出到任何其他命令或文件
这个 InputStream / Reader / OutputStream / Writer 这个想法与应用于javaapi的概念基本相同。

irtuqstp

irtuqstp3#

我想你要找的是正面图案。
事实上,inputstream/reader/stdin和outputstream/writer/stdout只提供了这一点。

nzkunb0c

nzkunb0c4#

考虑输出数据采用的形式,以及应用程序可能需要返回的响应对象,然后选择或创建满足这些需求的接口。
在最抽象的层次上,您将输出大量字节,因此 OutputStream 当然是“字节接收器”的正确接口。一个更高的抽象级别,您可能会输出文本字符,例如 Writer 是合适的。如果您正在传递域对象,那么您可能需要一些更具体的内容。
但是我怀疑你的界面不需要比

public interface Consumer<T>
{
    public void consume(T obj);
}

如果您的提供者关心这类事情(例如,记录处理的实体数的int),则可以使用返回类型。毫无疑问,在开源项目中有很多接口都符合类似的模式——毕竟,在一个单一的一元方法的接口中,只有这么多的变化——但是没有什么比这个模式的“一个真正的版本”更让人想到的了。此外,它非常容易理解,而且由于您不必担心实现问题,所以在大约60秒的时间内自己运行它几乎没有任何负面影响。

tzcvj98z

tzcvj98z5#

您可以设计数据生成api,使其与泛型 Writer 或者 OutputStream ; 我个人更喜欢 Writer 因为我认为它使api更好。

相关问题