黑马程序员技术交流社区

标题: 谁能帮我解释一下啊,看不明白 [打印本页]

作者: 欢欢    时间: 2014-4-14 17:53
标题: 谁能帮我解释一下啊,看不明白
本帖最后由 欢欢 于 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. }
复制代码



作者: 呆呆沙师妹    时间: 2014-4-14 19:50
本帖最后由 呆呆沙师妹 于 2014-4-14 19:51 编辑

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2