2011-01-28 6 views

답변

3

데이터를 바이트 배열로 읽어 들여야합니다.이 배열은 모두 하나의 배열 또는 여러 개의 바이트 배열 (읽히는 데이터의 크기에 따라 다름)로 읽은 다음 RMI를 통해 해당 바이트 배열을 전달해야합니다. 읽히지 않은 InputStream는 직접 건네 줄 수있는 데이터는 아닙니다.

3

수 없습니다. InputStream이 디스크에서 파일을 읽고 다른 시스템의 JVM에서 실행중인 EJB에 메소드 매개 변수로 보내면된다고 가정 해보십시오. 다른 컴퓨터에서 직렬화 될 때 그 InputStream이 의미있는 방법은 없습니다.

역학이 아닌 기본 문제에 대해 생각해 봐야합니다. InputStream을 직렬화 가능 객체 (예 : byte [] 배열)로 읽어 와서 전달해야합니다.

InputStream에서 메모리에 비해 너무 큰 내용을 읽으면 Serializable 개체로 래핑하고 전달하여 다른 쪽 끝에 InputStream을 만들 수있게해야합니다. 코스 - 그렇지 않으면 자신 만의 스트림을 만들어야합니다. 이것은 다른 질문입니다). 그의 대답 @Konstantin에서

2

썼다 : 읽지 않은

의 InputStream 직접 전달 될 수있는 데이터가 아닙니다.

정확하게!

예를 들어 System.in의 내용을 "java app </usr/bin/yes"로 호출되는 응용 프로그램에 대해 직렬화하려고하면 어떻게 될 것이라고 생각하십니까? (힌트 : "남자 예"라고 읽음)

스트림을 RMI를 통해 "전달"하려면 Stream API를 구현하는 래퍼 클래스를 생성하고 스트림 객체에 대한 RMI 콜백을 수행 할 수 있습니다 데이터를 읽거나 쓸 수 있습니다. 스트림 래퍼의 직렬화 된 상태에 콜백을 수행하기위한 핸들이 포함되도록 조정해야합니다.

그러나 클라이언트의 경우 전체 내용을 명시 적으로 읽은 다음 바이트 또는 문자 배열 또는 버퍼로 서버에 전달하는 것이 더 바람직합니다.

2

전화선을 통해 전화를 보내려하는 것과 같습니다. 그것은 의미가되지 않습니다

관련 문제