gpt4 book ai didi

java - 处理 try catch block 内的 MalformedURLException 异常

转载 作者:行者123 更新时间:2023-12-02 02:14:51 25 4
gpt4 key购买 nike

我有一段代码可以从给定的 URL 下载文件。我正在使用 InputStream 从流中读取数据。

public static byte[] fetchAttachmentFromThisURL(String path) {
String urlString = ORBEON_BASE + path;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
URL obj = new URL(urlString);
InputStream is = obj.openStream();
int n;
byte[] byteChunk = new byte[4096];
while ((n = is.read(byteChunk)) > 0) {
baos.write(byteChunk, 0, n);
}
is.close();
return baos.toByteArray();
}

URL obj = new URL(urlString); 抛出 MalformedURLExceptionis.close(); 抛出 IOException.

我的目标是处理 fetchAttachmentFromThisURL 方法中的所有异常。我不想在该方法中使用 throws 关键字。

方法设计1:

public static byte[] fetchAttachmentFromThisURL(String path) {
String urlString = ORBEON_BASE + path;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream is = null;
try {
URL obj = new URL(urlString);
is = obj.openStream();
int n;
byte[] byteChunk = new byte[4096];
while ((n = is.read(byteChunk)) > 0) {
baos.write(byteChunk, 0, n);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
is.close();
}
return baos.toByteArray();
}

finally中,必须有另一个try-catch block 来处理IOException,这绝对不是一个更干净的方法。

方法设计2:

public static byte[] fetchAttachmentFromThisURL(String path) {
String urlString = ORBEON_BASE + path;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
URL obj = new URL(urlString);
try (InputStream is = obj.openStream()) {
int n;
byte[] byteChunk = new byte[4096];
while ((n = is.read(byteChunk)) > 0) {
baos.write(byteChunk, 0, n);
}
} catch (IOException e) {
e.printStackTrace();
}
return baos.toByteArray();
}

此处,由于 obj 初始化抛出 MalformedURLException,因此出现编译时错误。同样,我无法在 try block 内移动此初始化行,因为这样做会使 obj 不可见。

输入流必须在finally block 中关闭,除非将try-catchresource一起使用。

是否有任何方法可以实现上述目标(如果可能的话,仅使用一个 try-catch block )?

最佳答案

这种设计是由 Eclipse IDE 建议的。我认为不应该有任何资源泄漏和异常。

public static byte[] fetchAttachmentFromThisURL(String path) {
String urlString = "" + path;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
URL obj = new URL(urlString);
int n;
byte[] byteChunk = new byte[4096];
while ((n = obj.openStream().read(byteChunk)) > 0) {
baos.write(byteChunk, 0, n);
}
} catch (IOException e) {
e.printStackTrace();
}
return baos.toByteArray();
}

关于java - 处理 try catch block 内的 MalformedURLException 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49448108/

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