Long 类的几个静态方法

看到Long这个类,颇感亲切,今天研究Long类的几个静态方法。

 

如果想把long类型数据转换为字节数组byte[ ],使用 Long.toString(l).getBytes()方法,但是这种转换很山寨。所以研究一下ing......

 

细心的人会发现这种算法,只是将long数据每一位转换为一个字节,如果你定义long = 12345L,那么就会得到5个字节。如果你定义long =

123456789L,那么就会得到9个字节。思考一下,这样产生的问题是什么?!

 

yes,long类型数据占有个字节,怎么会5、9呢?你可以测试一把,证明我所说的是否正确!呵呵!

研究一下String类的getBytes方法,其实etBytes调用StringCoding类的方法,将数字转换为字符char,并且使用ISO-8859-1编码,看一下:

 

 

 

我们知道,数字1对应的Ascii码就是1,但是字符‘1’对应的Ascii码却是31,有图为证:

所以,测试中你会发现1234L变成了49、50、51、52(这是十进制数,对应Ascii码的31、32、33、34)。

当然,如果你愿意的话,getBytes(Charset charset)方法可以指定其他字符编码。

现在,针对上面的“山寨”方法convertLongToByteArray,我需要将字节数组转换为long,看代码:

 

将String 转换为long,下面几个方法都可以:

 

valueOf方法,调用parseLong(String s, int radix)方法,其中参数radix表示基数即何种进制:

 

可见valueOf方法,调用parseLong方法,使用10进制为基数。研究一下parseLong(String s, int radix)源码:

 

有兴趣可以去看看getLong方法,它本质是调用valueOf方法,而valueOf方法本质是调用parseLong方法,所以在你的代码中应该使用哪个方法,你应该明白啦!

 

ok,到此为止!

 

感谢:http://www.asciitable.com/ 提供Ascii码表,另附一张图如下:

 

 

 

 

 

 

©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页