2016-08-10 8 views
0

안녕하세요 저는 dataOutputStreamrequestStream android로 맞춤 설정으로 사용하고 있습니다. 확장 클래스를 생성 한 직후 경고가 나타났습니다. android에서 dataOuputStream 확장

public class RequestStream extends DataOutputStream{ 
/** 
* Constructs a new {@code DataOutputStream} on the {@code OutputStream} 
* {@code out}. Note that data written by this stream is not in a human 
* readable form but can be reconstructed by using a {@link DataInputStream} 
* on the resulting output. 
* 
* @param out the target stream for writing. 
*/ 

그리고 내 모든 설정 requestStream

이 완료 요청 페이로드해야 [[email protected] 같았다. (위의 경고가 말한다처럼이 사람이 읽을 수 없었다)

그리고 나는

java.lang.IllegalStateException: Cannot set request property after connection is made

내가 어디에 코드 {@link DataInputStream}를 넣어하는 방법 알고 싶어 잘못된 DataOutputStream 정렬에서 결과를 추측 예외를 얻었다.

답변

1

최소한 세 가지 질문이 있습니다. 귀하의 [[email protected]

  1. 는 출력 스트림과 옳은 일하지 않은, toString()를 호출 한 결과입니다.
  2. IllegalStateException은 '잘못된 형식의 결과 DataOutputStream'이 아닙니다. 그것은 정확하게 말한 결과입니다. 연결을 만든 후에 요청 속성을 설정하려고했습니다. 코드에 게시하지 않았습니다.
  3. {@link DataInputStream}을 코드에 넣지 마십시오. 당신은 Javadoc 코멘트에 넣는다. 그리고 당신은 이미 가지고 있습니다. 네가 묻고있는 것이 불분명하다.

여기서 DataOutputStream을 확장해야하는 실제 이유는 없습니다.

+0

정말 고마워요 !! 'RequestStream'는 잘 작동하지만 Logcat에서'ByteArray'를 인쇄하려고 시도했습니다. 나는 연결 부분을 고정시켰다. 그것은 모두 잘 작동합니다. 고맙습니다! 내가 가진 오류를 알아내는 데 더 신중할 수 있습니다. –

0

DataOutputStream을 거의 확장 할 필요가 없습니다. 일반적으로 하나를 만들고 데이터를 입력합니다.

OutputStream os = ...; 
DataOutputStream dos = new DataOutputStream(os); 
dos.writeUTF("The ultimate answer is: "); 
dos.writeInt(42); 

다른 끝 부분에서 DataInputStream을 만들고 데이터를 추출합니다.

InputStream is = ...; 
DataInputStream dis = new DataInputStream(is); 
String message = dis.readUTF(); 
int answer = dis.readInt(); 

RequestStream 클래스는 스트림으로 더 복잡한 구조를 넣어 추가 "도우미"방법을 추가 할 수 있습니다 확장합니다. 이 경우 SDK는 복잡한 구조를 추출하는 해당 헬퍼가 포함 된 다른 클래스 (예 : RequestInputStream extends DataInputStream)를 제공해야합니다.


참고 : [[email protected]는 "아니 사람이 읽을 수있는"요청 스트림이 아닌 내용입니다; Object#toString()에 의해 생성 된 "사람이 읽을 수있는"String입니다. 덮어 쓰지 않는 한 getClass().getName() + '@' + Integer.toHexString(hashCode())을 반환합니다. 이 경우 클래스 이름은 [B이며 byte[]의 약어이고 해시 코드는 6a4fc1e입니다. 즉, 버퍼의 내용이 아니라 버퍼 자체의 핸들입니다.

+0

세부 정보가 마음에 듭니다. 내 코드에서 무엇이 잘못되었는지를 이해하는 데 정말로 도움이됩니다. 고맙습니다 ! –