두 개의 다른 응용 프로그램간에 큰 비트 맵을 보내기 위해 FileStream을 래핑하는 DataStream을 사용하고 있습니다 (인 텐트의 크기는 1MB이며 파일을 저장하지 않습니다. 파일 시스템),명명 된 파이프 대신 FileInputStream 및 File 객체를 사용할 때의 문제
DataInputStream은 스트림이 아직 열려 있지만 데이터가없는 경우 EOFException
을 던지고 있습니다. 나는 이것이 단순히 차단 될 것으로 예상했다. (문서가이 문제에 대해 상당히 모호하지만).
DataOutputStream 정렬 :
이public void onEvent() {
fos.writeInt(width);
fos.writeInt(height);
fos.writeInt(newBuffer.length);
fos.write(newBuffer);
}
의 DataInputStream :
이while(true) {
int width = fis.readInt();
int height = fis.readInt();
int length = fis.readInt();
byte[] bytes = new byte[length];
fis.read(bytes);
}
사람이 다른 하나 개의 스레드에서 데이터를 스트림 클래스의 더 나은 세트를 제안 할 수 있습니다 (/) (readInt (읽기) 성공적으로 블록).
는단순히 FileInputStream
및 FileOutputStream
를 사용하여 식 DataInputStream
및 DataOutputStream
을 제거하여이를 철하려고했습니다
편집 :
fos.write(intToByteArray(width));
fos.write(intToByteArray(height));
fos.write(intToByteArray(newBuffer.length));
Log.e(this.class.getName(), "Writing width: " + Arrays.toString(intToByteArray(width)) +
", height: " + Arrays.toString(intToByteArray(height)) +
", length: " + Arrays.toString(intToByteArray(newBuffer.length)));
fos.write(newBuffer);
if(repeat == -1) {
Log.e(this.class.getName(), "Closing ramFile");
fos.flush();
fos.close();
}
주는 :
Writing width: [0, 0, 2, -48], height: [0, 0, 5, 0], length: [0, 56, 64, 0]
다른 측면에 나는이 사용
[0, 0, 2, -48]
Reading width: 720, height: 1280, length: 3686400
하고 변태, read()
차단하지 않고 그냥 차단하지하지만 모든 값을 작성하지, 즐겁게 영위 :
while(true) {
byte[] intByteArray = new byte[] { -1,-1,-1,-1 };
fis.read(intByteArray);
Log.e(this.class.getName(), Arrays.toString(intByteArray));
int width = toInt(intByteArray, 0);
fis.read(intByteArray);
int height = toInt(intByteArray, 0);
fis.read(intByteArray);
int length = toInt(intByteArray, 0);
Log.e(this.class.getName(), "Reading width: " + width + ", height: " + height + ", length: " + length);
}
제공합니다 어느 (9,9,9,9에 배열을 초기화하는 것은 여전히 읽기 후에 9, 9, 9, 9 임).
[-1, -1, -1, -1]
Reading width: -1, height: -1, length: -1
java.lang.NegativeArraySizeException: -1
이것은 미친듯한 느낌입니까?