这并不是解决方案,只是为了证明 npinti 的答案听起来合理,但在我尝试确认时被证明是不准确的,因此误导开发人员构建在非英语系统上无法按预期工作的解决方案:
与人们可能期望的相反,IOException.getMessage()
返回的本地化字符串与 IOException.getLocalizedMessage()
相同。
运行此代码时:
try {
client.read(byteBuf);
} catch (IOException ioe) {
System.out.println("IOException.getMessage(): \"" + ioe.getMessage() + "\"");
System.out.println("IOException.getLocalizedMessage(): \"" + ioe.getLocalizedMessage() + "\"");
throw ioe;
}
在日本的Windows系统上,输出结果如下:
IOException.getMessage(): "既存の接続はリモート ホストに強制的に切断されました。"
IOException.getLocalizedMessage(): "既存の接続はリモート ホストに強制的に切断されました。"
Exception in thread "main" java.io.IOException: 既存の接続はリモート ホストに強制的に切断されました。
at java.base/sun.nio.ch.SocketDispatcher.read0(Native Method)
at java.base/sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
at java.base/sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:276)
at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:245)
at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:223)
at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:353)
at Test.main(Test.java:21)
在英文Linux上,它应该是这样的:
IOException.getMessage(): "Connection reset by peer"
IOException.getLocalizedMessage(): "Connection reset by peer"
Exception in thread "main" java.io.IOException: Connection reset by peer
at java.base/sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at java.base/sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at java.base/sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:276)
at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:245)
at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:223)
at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:353)
at Test.main(Test.java:21)
Windows Java版本:
openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment Temurin-11.0.12+7 (build 11.0.12+7)
OpenJDK 64-Bit Server VM Temurin-11.0.12+7 (build 11.0.12+7, mixed mode)
Linux Java版本:
openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment (build 11.0.12+7-Ubuntu-0ubuntu3)
OpenJDK 64-Bit Server VM (build 11.0.12+7-Ubuntu-0ubuntu3, mixed mode, sharing)