java中五种常见致命错误_在Java中生成致命错误

假设我们正在编写一个

Java库,它提供了一些I / O ulitity函数,例如,一个方便的方法来读取文本文件作为字符串:

public class StringReader {

private static final Logger log = LoggerFactory.getLog(StringReader.class);

/**

* Returns the contents of file fileName as String.

* @param fileName file name to read

* @return null on IO error

*/

public static String readString(String fileName) {

FileInputStream fis = null;

try {

fis = new FileInputStream(fileName);

byte[] data = new byte[fis.available()];

fis.read(data);

return new String(data, "ISO-8859-1"); // may throw UnsupportedEncodingException!

} catch (IOException e) {

log.error("unable to read file", e);

} catch (UnsupportedEncodingException e) {

log.fatal("JRE does not support ISO-8859-1!", e);

// ???

} finally {

closeQuiet(fis);

}

return null;

}

}

此代码使用ISO-8859-1编码将文本文件读入String,并将String返回给用户.

当不支持指定的编码时,String(byte [],String)构造函数抛出UnsupportedEncodingException.但是,正如我们所知,正如here (see the Standard charsets section)所说,ISO-8859-1必须得到JRE的支持.

因此,我们期待阻止

catch (UnsupportedEncodingException e) {

log.fatal("encoding is unsupported", e);

// ???

}

如果JRE分配符合标准,则永远不会达到.

但如果不是呢?如何以最正确的方式处理此异常?

问题是,如何正确警告这种错误?

建议是:

>抛出某种RuntimeException.

>不要在生产代码中禁用记录器,在日志中写入异常详细信息并忽略它.

>将assert设为false,如果用户使用-ea启动VM,则会产生AssertionError.

>手动抛出AssertionError.

>在方法声明中添加UnsupportedEncodingException并允许用户选择.我觉得不太方便.

>调用System.exit(1).

谢谢.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值