2016-07-14 3 views
0

これは世界でもっともシンプルなもののようですが、始めようとしています。私は窮地に瀕しています。テキストファイルからAkka Source [String]を作成するにはどうすればよいですか?

FileIO目的は当然Source[ByteString, Future[IOResult]]返すfromFile機能を提供します。

しかし、私はUTFエンコードされたテキストファイルを持っています。Source[String, Future[IOResult]] - つまり、ナンセンスのバイト文字列ではなく、ユニコード文字を含む通常の文字列のソースが必要です。

これはHelloレベルの世界的な例ですが、私は立ち往生しています。

(そして、何助けていないことfromFile私がまさに必要である、とakka.stream.scaladsl.Sourceので、誰も私にそれを説明することができれば、私は感謝するだろうscala.io.Source、間の名前の衝突である。)

+0

私の回答は役に立ちましたか? – jarandaf

+0

@jarandaf - のソート。それは私が通常のScala I/Oを使用することを決めたほど複雑でした。 – Malvolio

答えて

1

あなたはdecodeStringを使用することができます

decodeString(charset: String): String 

以上の一般的に、UTF-8のために:UTF-XにデコードするByteStringから機能

utf8String: String 

だから、基本的には:

val path = Paths.get("/tmp/example.txt") 
FileIO.fromPath(path) 
    .via(Framing.delimiter(ByteString(System.lineSeparator), maximumFrameLength=8192, allowTruncation=true)) 
    .map(_.utf8String) 

FileIO.fromFileが廃止されて注意してください。

1
import akka.NotUsed 

import scala.io.{Source => fileSource} 
import akka.stream.scaladsl.{Source => strmSource} 

val it = fileSource.fromFile("/home/expert/myfile.txt").getLines() 
val source : strmSource[String, NotUsed] = strmSource.fromIterator(() => it) 
    .map { line => 
    line.reverse 
    } 

このすべてのことは怠惰に評価されます。したがって、100GBは一度に読み取られません。

関連する問題