0

GZIPInputStream を使用して gzip ファイルを読み込んでいます。一度に大量のデータを読み込みたいのですが、GZIPInputStream に何バイト読み込むように要求しても、読み込まれるバイト数は常にはるかに少なくなります。例えば、

val bArray = new Array[Byte](81920)
val fis = new FileInputStream(new File(inputFileName))
val gis = new GZIPInputStream(fis)
val bytesRead =  gis.read(bArray)

読み取られるバイトは常に約 1800 バイトですが、bArray のサイズ (この場合は 81920) とほぼ同じになるはずです。なぜこのようになっているのですか?この問題を解決する方法はありますか?実際には、より多くのバイト数を読み取ることができますか?

4

3 に答える 3

2

大量のデータがある場合は、akka-streams を使用してみます。

  implicit val system = ActorSystem()
  implicit val ec = system.dispatcher
  implicit val materializer = ActorMaterializer()

  val fis = new FileInputStream(new File(""))
  val gis = new GZIPInputStream(fis) 
  val bfs: BufferedSource = Source.fromInputStream(gis)

bfsFlowストリーム処理用の API を 公開します。

そこからストリームを取得することもできます:

val ss: Stream[String] = bfs.bufferedReader().lines()
于 2017-01-27T19:35:56.737 に答える
0

OK、解決策を見つけました。バッファーのサイズも取る GZIPInputStream のコンストラクターのバージョンがあります。

于 2017-01-27T21:02:44.293 に答える