黑马程序员技术交流社区
标题:
自定义类加载器中关于截取子串的疑问
[打印本页]
作者:
傅宇
时间:
2013-3-17 22:58
标题:
自定义类加载器中关于截取子串的疑问
package com.itheima;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class MyClassLoader extends ClassLoader {
public static void main(String[] args) throws Exception {
String srcPath = args[0];
String destDir = args[1];
FileInputStream fis = new FileInputStream(srcPath);
String destFilename = srcPath.substring(srcPath.lastIndexOf('\\') + 1);// ?
String destPath = destDir + "\\" + destFilename;
FileOutputStream fos = new FileOutputStream(destPath);
cypher(fis, fos);
}
private static void cypher(InputStream ips, OutputStream ops)
throws Exception {
int b = -1;
while ((b = ips.read()) != -1) {
ops.write(b ^ 0xff);
}
ips.close();
ops.close();
}
private String classDir;
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
// TODO Auto-generated method stub
// String classFileName = classDir + "\\" + name + ".class";
String classFileName = classDir + "\\" + name.substring(name.lastIndexOf('.')+1) + ".class";
try {
FileInputStream fis = new FileInputStream(classFileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
cypher(fis, bos);
fis.close();
System.out.println("aaaaaaa");
byte[] bytes = bos.toByteArray();
return defineClass(null, bytes, 0, bytes.length);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return super.findClass(name);
}
MyClassLoader() {
}
MyClassLoader(String classDir) {
this.classDir = classDir;
}
}
复制代码
String destFilename = srcPath.substring(srcPath.lastIndexOf('\\') + 1);这行代码中截取到'\\'后的子串,其中“+1”是为了干什么?看不懂.
作者:
谢洋
时间:
2013-3-17 23:13
D:\eclips\works1\javaenhance\bin\cn\classloader\ClassLoaderAttachment.class,假设这是要截取的字符串
String destFilename = srcPath.substring(srcPath.lastIndexOf('\\') + 1);这行代码中截取到'\\'后的子串,其中“+1”是为了干什么?看不懂.
classloader\ClassLoaderAttachment.classsrc //Path.lastIndexOf('\\') 表示这里的“\”的角标,如不加1则截得结果是: \ClassLoaderAttachment.classsrc
,多了个"\",这并不我们想要的结果
作者:
全超
时间:
2013-3-17 23:30
lastIndexOf('\\')方法获取的是反向索引返回的是\\在字符串中最后一次出现的位置加入返回的是
substring(begin)返回的是字符串中的一部分,那么是那一部分呢?begin开始的位置,包含begin
substring(srcPath.lastIndexOf('\\') + 1);即\\后面的srcPath.lastIndexOf('\\')的位置往后在推一位,
例:c\\ab
lastIndexOf('\\');获取的为第三位3
要获取ab用subString()方法要从a开始即从4开始,所以要加1
作者:
陈丽莉
时间:
2013-3-18 14:53
若还有问题,请继续追问,没有的话,请将帖子分类改成【已解决】~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2