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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 欢欢 高级黑马   /  2014-4-14 17:53  /  857 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 欢欢 于 2014-4-14 21:20 编辑

看到张孝祥老师高新的第47个视频了:编写自己的解密类加载器,
有以下两处不明白的地方,请看注释:
  1. @Override
  2. protected Class<?> findClass(String name) throws ClassNotFoundException {
  3. String classFileName = classDir + "\\" + name + ".class";
  4. try {
  5. FileInputStream fis = new FileInputStream(classFileName);
  6. ByteArrayOutputStream bos = new ByteArrayOutputStream();//1.不明白这里为什么要用ByteArrayOutputStream???
  7. cypher(fis,bos);
  8. fis.close();
  9. byte[] bytes = bos.toByteArray();//2.这步也不明白???
  10. return defineClass(bytes, 0, bytes.length);

  11. } catch (Exception e) {

  12. e.printStackTrace();
  13. }
  14. return super.findClass(name);
  15. }
复制代码


3 个回复

倒序浏览
本帖最后由 呆呆沙师妹 于 2014-4-14 19:51 编辑

Java默认的整型数据为int,在调用read方法时会自动将byte字节提升为int类型,故cypher方法中写入数据时要^0xff,选用ByteArrayOutputStream类,是因为该类内部封装了buf的字节数组,方便用来存储字节数据,而toByteArray是该类提供的方法,能创建一个新分配的 byte 数组。其大小是此输出流的当前大小。这样在定义bytes时,就直接将新分配的byte数组地址赋值给bytes,就不用自己指定数组大小,避免浪费。

点评

谢谢  发表于 2014-4-14 21:20
回复 使用道具 举报
我怀疑你io流那章就没有看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马