请各位同仁帮我解释一下 ,下面的代码
public void sendString(PrintStream outstream, String string) {
// TODO Auto-generated method stub
try {
outstream.println(string.length());
int len = string.length() * 2;
byte buf[] = new byte[len];
for (int i = 0; i < string.length(); i++) {
buf[i * 2] = (byte) (string.charAt(i) >> 8);
buf[i * 2 + 1] = (byte) string.charAt(i);
}
outstream.write(buf, 0, len);//将 len 字节从指定的初始偏移量为 0 的字节数组写入此流。
outstream.flush();
} catch (Exception e) {
offline = true;
System.out.println(" sendString() error:" + e);
}
}
public void sendString(PrintStream outstream, String string) {
// TODO Auto-generated method stub
try {
outstream.println(string.length());
int len = string.length() * 2;
byte buf[] = new byte[len];
for (int i = 0; i < string.length(); i++) {
buf[i * 2] = (byte) (string.charAt(i) >> 8);
buf[i * 2 + 1] = (byte) string.charAt(i);
}
outstream.write(buf, 0, len);//将 len 字节从指定的初始偏移量为 0 的字节数组写入此流。
outstream.flush();
} catch (Exception e) {
offline = true;
System.out.println(" sendString() error:" + e);
}
}
try {
// 将字符串的长度写入并换行
outstream.println(string.length());
int len = string.length() * 2;
// 定义一个字符串2倍长度的字节数组
byte buf[] = new byte[len];
for (int i = 0; i < string.length(); i++) {
// 如果是偶数的位置就向右移动8位,即偶数的地方放null
buf[i * 2] = (byte) (string.charAt(i) >> 8);
// 在奇数的位置放数据
buf[i * 2 + 1] = (byte) string.charAt(i);
}
// 写入
outstream.write(buf, 0, len);// 将 len 字节从指定的初始偏移量为 0 的字节数组写入此流。
outstream.flush();
} catch (Exception e) {
// offline = true;
System.out.println(" sendString() error:" + e.getMessage());
}
先打印出字符串长度,然后开一个byte数组buf,长度是String的长度乘以2,
做一个循环,执行次数为string的长度,取stirng中位置为i的字符,将其右移8位,转换成byte类型后赋给buf中下标为偶数的元素,
取stirng中位置为i的字符,转换成byte类型后赋给buf中下标为奇数的元素,
从buf的起始位置开始将其写入到输出流中,写得长度是len,之后输出,最后捕捉异常关于右移运算:
value >> num
这里,num 指定要移位值value 移动的位数。也就是,右移运算符>>使指定值的所有位都右移num位。
用二进制表示该过程可以更清楚地看到程序的运行过程:
00100011 35
>> 2
00001000 8
将值每右移一次,就相当于将该值除以2并且舍弃了余数。
右移时,被移走的最高位(最左边的位)由原来最高位的数字补充。
--------------
例:
12>>2
--------------
12的二进制形式:
...32 16 8 4 2 1
...0 0 1 1 0 0
--------------
12右移2位
...0 0 1 1 0 0
...0 0 0 0 0 1 1
二进制11就是整数3
--------------
所以
12>>2 的结果等于 3
12>>1 的结果等于 6