A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chslzj 中级黑马   /  2013-7-7 07:58  /  1220 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 chslzj 于 2013-7-7 10:54 编辑
  1. private static void cypher(InputStream ips ,OutputStream ops) throws Exception{
  2.                 int b = -1;
  3.                 while((b=ips.read())!=-1){
  4.                         ops.write(b ^ 0xff);
  5.                 }
  6.         }
复制代码
在这一段代码里面,b是int类型的,从ips.read()返回的是读取的字节长,为什么下面的ops.write(b^0xff)就能读取的ips.read()里面的值呢?

3 个回复

倒序浏览
这里是用一个int类型来装一个字节类型,比方说ips.read()读到的一个字节是 01010001那么它就会返回一个4个字节的数据
b = 00000000 00000000 00000000 01010001前面三个字节是没有实际意义的,然后b^0xff 就是
00000000 00000000 00000000 01010001
                                                           ^
                                             11111111
                                                           =
                                             10101110
ops.write()写入时也写入最后一个字节 10101110,如果要一次写入一个4个字节的int数据的话,在RandomAccessFile里边有writeInt()的方法。
回复 使用道具 举报
liujkh123 发表于 2013-7-7 08:48
这里是用一个int类型来装一个字节类型,比方说ips.read()读到的一个字节是 01010001那么它就会返回一个4个 ...

好吧,看了你的说法,觉得我的认识出现了偏差,ips.read()方法如果没有任何参数的话,是不是只读一个字节的数据,返回值就是它读的数据,而不是它所读的字节长?有参数的话,返回值就是它所读的字节长?
回复 使用道具 举报
嗯 是这样的,没有参数的read()返回的是数据本身,有参数的read(byte[] b)返回的是读取的字节的个数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马