blob: 8e6c97df3e55c0fbad90823e29361df8fc12645c [file] [log] [blame]
/*
* Copyright 1999-2011 Alibaba Group.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.dubbo.common.io;
import org.junit.Assert;
import junit.framework.TestCase;
public class BytesTest extends TestCase
{
private static final byte[] b1 = "adpfioha;eoh;aldfadl;kfadslkfdajfio123431241235123davas;odvwe;lmzcoqpwoewqogineopwqihwqetup\n\tejqf;lajsfd中文字符0da0gsaofdsf==adfasdfs".getBytes();
public void testMain() throws Exception
{
short s = (short)0xabcd;
assertEquals(s, Bytes.bytes2short(Bytes.short2bytes(s)) );
int i = 198284;
assertEquals(i, Bytes.bytes2int(Bytes.int2bytes(i)) );
long l = 13841747174l;
assertEquals(l, Bytes.bytes2long(Bytes.long2bytes(l)) );
float f = 1.3f;
assertEquals(f, Bytes.bytes2float(Bytes.float2bytes(f)) );
double d = 11213.3;
assertEquals(d, Bytes.bytes2double(Bytes.double2bytes(d)) );
assertSame(Bytes.int2bytes(i), int2bytes(i));
assertSame(Bytes.long2bytes(l), long2bytes(l));
}
public void testBase64() throws Exception
{
String str = Bytes.bytes2base64(b1);
byte[] b2 = Bytes.base642bytes(str);
assertSame(b1, b2);
}
static byte[] bytes1 = {3,12,14,41,12,2,3,12,4,67,23};
static byte[] bytes2 = {3,12,14,41,12,2,3,12,4,67};
// 把失败的情况,失败Case加的防护网:
// 当有填充字符时,会失败!
public void testBase64_s2b2s_FailCaseLog() throws Exception {
String s1 = Bytes.bytes2base64(bytes1);
byte[] out1 = Bytes.base642bytes(s1);
Assert.assertArrayEquals(bytes1, out1);
String s2 = Bytes.bytes2base64(bytes2);
byte[] out2 = Bytes.base642bytes(s2);
Assert.assertArrayEquals(bytes2, out2);
}
public void testHex() throws Exception
{
String str = Bytes.bytes2hex(b1);
assertSame(b1, Bytes.hex2bytes(str));
}
private static void assertSame(byte[] b1, byte[] b2)
{
assertEquals(b1.length, b2.length);
for(int i=0;i<b1.length;i++)
assertEquals(b1[i], b2[i]);
}
// tb-remoting codec method.
static public byte[] int2bytes(int x) {
byte[] bb = new byte[4];
bb[0] = (byte) (x >> 24);
bb[1] = (byte) (x >> 16);
bb[2] = (byte) (x >> 8);
bb[3] = (byte) (x >> 0);
return bb;
}
static public int bytes2int(byte[] bb, int idx) {
return ((bb[idx + 0] & 0xFF) << 24)
| ((bb[idx + 1] & 0xFF) << 16)
| ((bb[idx + 2] & 0xFF) << 8)
| ((bb[idx + 3] & 0xFF) << 0);
}
static public byte[] long2bytes(long x) {
byte[] bb = new byte[8];
bb[0] = (byte) (x >> 56);
bb[1] = (byte) (x >> 48);
bb[2] = (byte) (x >> 40);
bb[3] = (byte) (x >> 32);
bb[4] = (byte) (x >> 24);
bb[5] = (byte) (x >> 16);
bb[6] = (byte) (x >> 8);
bb[7] = (byte) (x >> 0);
return bb;
}
static public long bytes2long(byte[] bb, int idx) {
return (((long) bb[idx + 0] & 0xFF) << 56)
| (((long) bb[idx + 1] & 0xFF) << 48)
| (((long) bb[idx + 2] & 0xFF) << 40)
| (((long) bb[idx + 3] & 0xFF) << 32)
| (((long) bb[idx + 4] & 0xFF) << 24)
| (((long) bb[idx + 5] & 0xFF) << 16)
| (((long) bb[idx + 6] & 0xFF) << 8)
| (((long) bb[idx + 7] & 0xFF) << 0);
}
}