[SCALA] 예외 : ZLIB 입력 스트림의 예기치 않은 종료
SCALA예외 : ZLIB 입력 스트림의 예기치 않은 종료
GZIPInputStream 또는 GZIPOutputStream에 뭔가 잘못이있다. 그냥 다음 코드를 읽고 (또는 실행 무슨 일이 일어 참조)하십시오 :
def main(a: Array[String]) {
val name = "test.dat"
new GZIPOutputStream(new FileOutputStream(name)).write(10)
println(new GZIPInputStream(new FileInputStream(name)).read())
}
또한, 파일을 생성 TEST.DAT GZIP 포맷으로 단일 바이트 (10)를 기록하고, 동일한 형식으로 동일한 파일에 바이트를 읽는다.
그리고 이것은 내가 그것을 실행있어 것입니다 :
Exception in thread "main" java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.InflaterInputStream.fill(Unknown Source)
at java.util.zip.InflaterInputStream.read(Unknown Source)
at java.util.zip.GZIPInputStream.read(Unknown Source)
at java.util.zip.InflaterInputStream.read(Unknown Source)
at nbt.Test$.main(Test.scala:13)
at nbt.Test.main(Test.scala)
판독 라인은 어떤 이유로 잘못된 방향으로가는 것 같다.
나는 ZLIB 입력 스트림의 오류 예기치 않은 끝을 봤와 2007-2010 주위에 발행 된 오라클, 몇 가지 버그 리포트를 발견했다. 내가 버그를 추측 그래서 여전히 어떤 방법으로 남아 있지만 잘 모르겠어요 내 코드가 맞다면, 그래서 내가 여기를 게시하고 조언을들을 수 있습니다. 감사합니다!
해결법
-
==============================
1.당신은 당신이 그것을 읽을하기 전에 close ()를 GZIPOutputStream에 전화를해야합니다. 실제로 파일이 닫힐 때 파일의 마지막 바이트 만 기록됩니다. (이 출력 스택의 명시 적 버퍼링 관계없이입니다. 스트림은 압축을 알고 당신이 가깝습니다. 플러시 (로 말할 때 마지막 바이트 쓰기) 아마하지 않습니다 도움 ... 마무리를 호출하지만 () 대신 가까이 () 작동합니다. JavaDoc을 봐.)
당신은 당신이 그것을 읽을하기 전에 close ()를 GZIPOutputStream에 전화를해야합니다. 실제로 파일이 닫힐 때 파일의 마지막 바이트 만 기록됩니다. (이 출력 스택의 명시 적 버퍼링 관계없이입니다. 스트림은 압축을 알고 당신이 가깝습니다. 플러시 (로 말할 때 마지막 바이트 쓰기) 아마하지 않습니다 도움 ... 마무리를 호출하지만 () 대신 가까이 () 작동합니다. JavaDoc을 봐.)
여기에 (자바) 올바른 코드입니다;
package test; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; public class GZipTest { public static void main(String[] args) throws FileNotFoundException, IOException { String name = "/tmp/test"; GZIPOutputStream gz = new GZIPOutputStream(new FileOutputStream(name)); gz.write(10); gz.close(); System.out.println(new GZIPInputStream(new FileInputStream(name)).read()); } }
(I 제대로 자원 관리를 구현 적이 없다. "좋은 코드"의 예로서이 취급하지 마십시오.)
from https://stackoverflow.com/questions/24531089/exception-unexpected-end-of-zlib-input-stream by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] unionAll을 여러 dataframes 불꽃 (0) | 2019.11.07 |
---|---|
[SCALA] 튜플 매개 변수 선언과 할당 기이 (0) | 2019.11.07 |
[SCALA] 볼품에 반복적으로 이기종 목록에 케이스 클래스를 변환하려고 이상한 행동 (0) | 2019.11.07 |
[SCALA] 어떻게 디스크에 CSV로 스파크 DataFrame을 저장? (0) | 2019.11.07 |
[SCALA] 스칼라 람다 함수에서 _의 사용 (0) | 2019.11.07 |