gpt4 book ai didi

java - 扩展 InputStreamReader 行为的最有效方法是什么?

转载 作者:行者123 更新时间:2023-11-30 08:00:22 26 4
gpt4 key购买 nike

我在一个项目中基本上有这些代码行,它将输入流复制到输入流读取器中,以便它可以独立流式传输:

final InputStream stream = new InputStream(this.in);    
ByteArrayOutputStream baos = new ByteArrayOutputStream();
org.apache.commons.io.IOUtils.copy(stream, baos);
InputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
baos.close();
InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8");

它工作正常,但我想将此代码封装到一个对象中,例如“InputStreamReaderCopy”,它将扩展InputStreamReader,以便可以完全像它一样使用。

我想首先编写这样的代码:

public class InputStreamReaderCopy extends InputStreamReader {
public InputStreamReaderCopy(InputStream inputStream, String encoding) throws IOException{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(inputStream, baos);
InputStream newInputStream = new ByteArrayInputStream(baos.toByteArray());
baos.close();
super(newInputStream, encoding);
}
}

但正如您所料,不可能在构造函数中的其他内容之后调用 super()。

我终于拥有了一个私有(private)成员

private InputStreamReader reader;

并使用InputStreamReader的委托(delegate)方法并调用这些东西

@Override
public int read(CharBuffer target) throws IOException {
return reader.read(target);
}

问题是我需要打电话

super(inputStream);

在我的构造函数的第一行中,即使没有任何意义(因为所有覆盖的方法都调用私有(private)成员的方法)。有什么办法可以让这段代码更加优雅吗?我应该避免扩展 InputStreamReader 吗?

实现@maxime.bochon 的答案(非常适合我)

public class InputStreamReaderCopy extends InputStreamReader {

private static InputStream createInputStreamCopy(InputStream inputStream )throws IOException{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(inputStream, baos);
InputStream newInputStream = new ByteArrayInputStream(baos.toByteArray());
baos.close();
return newInputStream;
}

public InputStreamReaderCopy(InputStream inputStream) throws IOException{
super(createInputStreamCopy(inputStream), "UTF-8");
}
}

最佳答案

尝试将创建InputStream的代码放在私有(private)静态方法中。然后,您应该能够将 super 调用放在第一位,并将方法调用作为第一个参数。 这是您问题的第一部分......

关于java - 扩展 InputStreamReader 行为的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32047479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com