Как прочитать каждую новую строку из файла после 10 секундной задержки с Akka? - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь читать из файла построчно с некоторой задержкой.

Например:

  • прочитать и распечатать 1-ю строку файла
  • подождите 10 секунд
  • прочитать и распечатать вторую строку файла
  • и т.д.

Пока я пробовал что-то вроде этого:

final Path filePath = Paths.get('path/to/file');
final ActorSystem system = ActorSystem.create();
final Materializer materializer = ActorMaterializer.create(system);

Sink<ByteString, CompletionStage<Done>> printlnSink =
   Sink.<ByteString>foreach(chunk -> System.out.println(chunk.utf8String()));

final CompletionStage<IOResult> result = 
  FileIO.fromPath(filePath)
 .throttle(1, Duration.create(10, TimeUnit.SECONDS), 1, ThrottleMode.shaping())
 .to(printlnSink)
 .run(materializer);

Но это порождает слишком много строк за раз, а не одну строку за раз.

Есть идеи как это исправить?

1 Ответ

0 голосов
/ 02 января 2019
final CompletionStage<IOResult> result = 
 .via(Framing.delimiter(ByteString.fromString(System.lineSeparator()),10000,FramingTruncation.ALLOW))
  FileIO.fromPath(filePath)
 .throttle(1, Duration.create(10, TimeUnit.SECONDS), 1, ThrottleMode.shaping())
 .to(printlnSink)
 .run(materializer);

Посмотрите, подходит ли вам это, Класс обрамления Документы должны уточнить

...