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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彭润生 中级黑马   /  2012-9-19 10:38  /  1306 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
class JiaMi
{
public static void main(String[] args) throws Exception
{
  File file = new File("D:\\tra\\export.txt");
  if(!file.exists())
  {
   throw new RuntimeException("文件不存在");
  }
  FileInputStream fis = new FileInputStream(file);
  FileOutputStream fos = new FileOutputStream("D:\\tra\\jiamihou.txt");
  
  int len = 0;
  while((len = fis.read())!=-1)
  {
   fos.write(len^0x5f);//如果要用byte类型的数据进行这样的计算,该怎样弄,怎样才能不丢失精度呢?如果&上个0xff那么数据没变化。为什么?
  }
  fos.close();
  fis.close();
}
//上面我用的这个
   byte[] buf = new byte[1024];
  int len = 0;
  while((len = fis.read(buf))!=-1)
  {
   
   for(int x = 0;x<len;x++)
   {
    buf[x] = buf[x]&0xff;
   }
   fos.write(buf,0,len);
  }//会出现损失精度的可能。怎么解决?

4 个回复

倒序浏览
吕书凯 发表于 2012-9-19 11:39
这是你的加密算法,就是让32位的int类型的len去异或一个16进制的数10111111(5F),当然
会损失精度,&0xff ...

int的那个没有损失,下面的那个byte在进行那个运算是损失精度,要怎么样弄呢?
回复 使用道具 举报
吕书凯 发表于 2012-9-19 12:53
损失精度是因为数字都是Int类型的,你用一个byte去与一个int,再想返回一个byte,肯定不行,类型提升了回 ...

解决不了?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马