2014-03-06 9 views
0

클래스를 URLClassLoader에서 일반 file.class로 저장할 수 있습니까? 그런 다음 디 컴파일합니까? 클래스를 URLClassLoader의 파일에 저장 하시겠습니까? 그것을 디 컴파일합니까?

난 그냥 작동하지 않습니다

 Class<?> clazz = classLoader.loadClass("foo.Bar"); 
     FileOutputStream sf = new FileOutputStream(f); 
     ObjectOutputStream s = new ObjectOutputStream(sf); 
     s.writeObject(clazz); 
     s.close(); 

니어를 사용하여 객체로 저장하려고.

그래서 ... 그것을 디 컴파일하는 방법? jd-gui 결과와 같은 것이 필요하지만 URLClassLoader의 클래스를 사용해야합니다.

답변

2

클래스 이름 (예 : "foo.Bar")을 리소스 경로 이름 (예 : "/foo/Bar.class")에 매핑 한 다음 classLoader.getResourceAsStream을 사용하여 바이트 코드 파일을 읽는 스트림을 열어야합니다.

이것은 이론적으로 디 컴파일러에 공급할 수 있습니다 ... InputStream에서 읽을 수있는 디 컴파일러가 있다고 가정합니다.


Class 개체를 직렬화 할 수 없기 때문에 현재 수행중인 작업이 실패합니다.

0

클래스를 파일로 가져 오려면 URLClassLoader가 아닌 간단한 HTTP 다운로드를 수행하십시오. 그런 다음 디 컴파일하십시오.

(ObjectOutputStream에에 객체를 작성에만 객체의 예를의 데이터를 저장하고, 심지어는 객체 직렬화를 구현 한 경우에만 작동합니다. 당신이 여기 찾고 싶으세요.)