通过Java1.6的jdk获取中文计算机名称时,存在一个bug。
前提条件
- 运行程序的计算机名称中含有中文,如:中文名称_ENGLISH
- 运行程序的计算机ip为10.36.24.17
代码如下:
public class NetAddress {
public static void println(String s, InetAddress address){
String sName = address.getHostName();
String sIp = address.getHostAddress();
System.out.println(s + "_" + sName + "_" + sIp);
System.out.println("名称byte数组:" + Arrays.toString(sName.getBytes()));
}
public static void main(String[] args) throws UnknownHostException{
// NetAddress n = new NetAddress();
// n.show2();
// 本地
InetAddress address1 = InetAddress.getLocalHost();
println("local", address1);
//
InetAddress address2 = InetAddress.getByName("10.36.24.17");;
println("getByName", address2);
InetAddress address3 = InetAddress.getByName("127.0.0.1");;
println("127.0.0.1", address3);
InetAddress address4 = InetAddress.getByName("");;
println("空", address4);
}
}
以上程序,通过4种方法获取计算机的信息,并分别打印计算机的名称和IP,同时把计算机名称byte字节流也逐一打印出来。
执行程序,打印信息如下:
local_????????_ENGLIS_10.36.24.17
名称byte数组:[63, 63, 63, 63, 63, 63, 63, 63, 95, 69, 78, 71, 76, 73, 83]
getByName_中文名称_ENGLISH_10.36.24.17
名称byte数组:[-42, -48, -50, -60, -61, -5, -77, -58, 95, 69, 78, 71, 76, 73, 83, 72]
127.0.0.1_localhost_127.0.0.1
名称byte数组:[108, 111, 99, 97, 108, 104, 111, 115, 116]
空_localhost_127.0.0.1
名称byte数组:[108, 111, 99, 97, 108, 104, 111, 115, 116]
结论:
从打印信息可以看出:
- InetAddress.getLocalHost() 获取的信息,如果计算机名称为中文,则会出现问题。因为名称字节流无论中、英文都用1个字节表示,自然会出现乱码。
- InetAddress.getByName("10.36.24.17")获取的信息,无论计算机是中文还是英文都是正确的。因为名称此字节流中使用2个字节表示中文,1个字节表示英文。
-
InetAddress.getByName("127.0.0.1") 和 InetAddress.getByName("")获取的计算机名称都是“localhost”
bug无处不在,没想到JDK自带类也存在bug
分享到:
相关推荐
aspose-words-19.2-jdk16 本地仓库地址,若有问题请及时联系我。 获取license方法如下 public static boolean getLicense() throws Exception { boolean result = false; try { InputStream is = ...
java-jdk1.8-8u361-all-jdk-win-linux 该压缩包中包含jdk1.8-8u361下windows版本和linux版本,其包含快速安装包和对应的jdk压缩包版本,具体内容如下: jdk-8u361-linux-aarch64.rpm jdk-8u361-linux-i586.rpm jdk-8...
2.将下载的两个JAR文件复制到:JDK安装目录\jre\lib\ext下,例如我的就是D:\Program Files (x86)\java\JDK1.6\jre\lib\ext 3.打开java.security文件:在JDK安装目录\jre\lib\security下的java.security文件。
aspose-words-21.1-jdk17.jar 处理word转pdf,无水印无文件大小限制,无使用时间限制,可以用于word编辑处理,转pdf等用途。 。由于aspose调用的时候有点消耗内存,操作大文件的时候可能会堆溢出,所以请先设置好...
本版本修复 JDK的Bug1–数组切割 JDK的Bug2–三元运算符 JDK中不算Bug的Bug–ArrayList可通过构造函数传入非指定泛型的List并在get时出错
java_ee_sdk-7-jdk7-windows-ml
sun-java6-jdk的安装包。还有一些openoffice3.0在ubuntu上的安装文档说明。
两个包打包下载,根据需要添加相应的包,区别在于1.4版本之后,bcprov-jdk15on-152中移除了一些加密算法,bcprov-ext-jdk15on-152中依然保留。
java_ee_sdk-7-jdk7-windows-x64-ml
json-lib-2.4-jdk15所需全部JAR包,资源清单 json-lib-2.4-jdk15.jar 依赖: ezmorph-1.0.6.jar commons-beanutils-1.8.3.jar commons-lang-2.5.jar morph-1.1.1.jar commons-logging-1.1.1.jar commons-collections-...
Java将word文档转换成pdf所需要的jar包(解压后使用)。 1.用以下命令注册到本地maven仓库: mvn install:install-file -Dfile=D:\aspose-words-15.8.0-jdk16.jar -DgroupId=...
jdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windowsjdk-11.0.6_windows
安装步骤:1、将deb文件上传到/var/cache/apt/archives目录 2、sudo apt-get install openjdk-8-jdk
包含jdk-7u6-linux-x64.tar.gz 和 java-7-openjdk-amd64.tar.gz
bcprov-ext-jdk15on-164.jar:支持java5-11。将jar包放置在%java_home%/jre/lib/ext目录。
github上下载的weixin-java-tools-1.3.3是jdk1.7版本以上编译的,在jdk1.6版本以下无法使用,此架包是经过jdk1.6重新编译打包,可以在jdk1.6的环境下运行。
bcprov-ext-jdk15on-1.54.jar和bcprov-jdk15on-1.54.jar压缩文件
json-lib-2.4-jdk15-sources.jar 是net.sf.json-lib-jdk15-2.4的源码文件
bcprov-ext-jdk16-1.45.jar资源包 ,在进行JAVA的ECC椭圆算法调用时,需要用到的jar包
json-lib-2.2.3-jdk15.jar commons-beanutils-1.7.0.jar commons-httpclient-3.1.jar commons-lang-2.3.jar commons-logging-1.1.1.jar commons-collections-3.2.1.jar ezmorph-1.0.3.jar 如果不关联这些包,则会...