gpt4 book ai didi

java - try-catching 实际上在 Java 中如此笨拙,还是我只是不知道这种优雅的方法?

转载 作者:行者123 更新时间:2023-11-30 10:21:47 28 4
gpt4 key购买 nike

public void lock() {
if (this.isLocked()) return;

try {
this.dataOut.flush();
this.dataOut.close();
} catch (IOException e) {
throw new RuntimeException(e);
}

DataInputStream inputStream =
new DataInputStream(
new BufferedInputStream(
new ByteArrayInputStream(
this.byteOut.toByteArray())));

IntStream.Builder intStreamBuilder = IntStream.builder();
try {
try {
while (true) {
intStreamBuilder.accept(inputStream.readInt());
}
} catch (EOFException e) {
// logic to be executed after stream has been fully read
int[] pool = intStreamBuilder.build().toArray();
super.lock(pool);
} finally {
inputStream.close();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}

我在这里所做的是获取一个包含 IntegerDataOutputStream,将其剩余内容刷新到名为 this.byteOut 的 ByteArrayOutputStream 然后从中构建一个 IntStream

我来自 C# 领域并且正在学习 Java,因此这里的代码没有任何实际目的。

有没有什么方法可以用 Java 更优雅地完成我在这里所做的事情?

我主要关心的两个问题是:

  • 我确定 DataInputStream 已被完全读取的方法是捕获 EOFException 并将读取后要执行的逻辑放入 catch block 。我不喜欢那样,因为我认为抛出和捕获异常有点昂贵?有没有更好的方法来确定流不再包含任何 Integer
  • 事实上,我必须在 try-catch block 周围包装一个 try-catch block ,以便能够在内部 finally 中调用 inputStream.close()堵塞。有没有不那么笨拙的解决方案?

最佳答案

主要是你。如果你不喜欢 try with resources 构造,您仍然可以组合所有 try 语句并堆叠 catch block 。

public void lock()
{
DataInputStream inputStream = null;
IntStream.Builder intStreamBuilder;

if (isLocked())
{
return;
}

try
{
inputStream = new DataInputStream(
new BufferedInputStream(
new ByteArrayInputStream(
byteOut.toByteArray())));

intStreamBuilder = IntStream.builder();

dataOut.flush();
dataOut.close();

while (true)
{
intStreamBuilder.accept(
inputStream.readInt());
}
}
catch (IOException exception)
{
throw new RuntimeException(exception);
}
catch (EOFException ignoredException)
{
// logic to be executed after stream has been fully read
int[] pool = intStreamBuilder.build().toArray();
super.lock(pool);
}
finally
{
if (inputSream != null)
{
try
{
inputStream.close();
}
catch (IOException exception)
{
throw new RuntimeException(exception);
}
}
}
}

finally 中的 try 是必需的。

我更喜欢 try-with-resources 结构。

关于java - try-catching 实际上在 Java 中如此笨拙,还是我只是不知道这种优雅的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47640647/

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