2012-01-15 2 views
1

네트워크를 통해 클래스 데이터를 보내려고합니다. 클래스 이름에서 .class 파일의 이진 데이터를 가져와야합니다. 기본 클래스 로더를 사용하고 네트워크를 통해로드 된 데이터를 보내고 싶습니다. 어떻게해야합니까? scala 2.9.0.1 및 jre6을 사용하고 있습니다.클래스 [_] 객체에서 이진 데이터를 가져 오는 방법은 무엇입니까?

+0

클래스 인스턴스의 데이터를 클래스 자체의 바이트 코드로 보내시겠습니까? –

+0

저는 스칼라 원격 액터를 사용하고 있습니다. 연결이 설정된 후 서버에서 클라이언트로 클래스의 인스턴스를 보냅니다. deserialize하는 동안 클래스 정의를 찾을 수없는 경우 서버에 요청을 보냅니다. 그리고 문제는 여기에 있습니다. 서버가 jar 파일로 패키지되어있는 경우 다시 보낼 대상을 찾을 수 없습니다. – laci37

답변

4

RMI를 사용하면 네트워크에서 클래스 파일을로드 할 수 있습니다. 그것은 아마도 자신의 솔루션을 구르는 것보다 쉽습니다. 살펴보기 http://docs.oracle.com/javase/6/docs/technotes/guides/rmi/codebase.html

+0

.class 파일에 대한 경로를 알고 있으면 모든 것이 설정되고 작동합니다. 하지만 jar 파일로 패키지를 만들고 싶다면 클래스 파일의 경로를 결정할 수 없으므로 실패합니다. – laci37

1

정규화 된 클래스 이름의 마침표를 파일 구분 기호로 바꾸고 ".class"를 결과에 추가하면 클래스 경로에있는 .class 파일의 위치가됩니다. 그런 다음 ClassLoader를 사용하여 파일을 스트림으로 액세스하십시오.

val location = className.replaceAll("\\.",File.separator) + ".class" 
val stream = ClassLoader.getSystemClassLoader().getResourceAsStream(location) 
//send the stream to your remote location 
+0

이것은 jar 파일에서 작동하지 않는 것 같습니다. – laci37

+0

항아리에 있든 상관없이 클래스 패스에서 아무 것도 선택하지 않아야합니다. 문제가 발생하면 사용중인 ClassLoader가 문제가 될 가능성이 더 높습니다. MyClass라는 클래스에서이 작업을 시도했다면 다음과 같이 시도하십시오. MyClass.class.getClassLoader(). getResourceAsStream (....) –

관련 문제