次のコードを使用して大きなファイルを読み取り、バッファごとに TCP 接続バッファを介してファイルの内容を送信しています。各送信の最後に、TCP チャネルは CRLF 文字を追加します。追加しない限り、これを結果に表示したくありません。
final int BUFFER_SIZE = 65536;
long bytesToSkip = 0;
byte[] buffer = new byte[BUFFER_SIZE];
try (RandomAccessFile rand = new RandomAccessFile(new File(requestModel.getFilePath()), "r");
) {
rand.seek(bytesToSkip);
while ((read = rand.read(buffer)) != -1) {
MessageBuilder mb = MessageBuilder.withPayload(buffer).setHeaderIfAbsent(IpHeaders.CONNECTION_ID, connectionId);
outMsgChannel.send(mb.build())
buffer = new byte[BUFFER_SIZE];
}
}
catch(Exceptions ..............
新しい行が追加されたサンプル出力。(どちらのバッファも巨大です。各バッファの最後で問題を引き起こしている行だけを説明しました)
バッファーワン入り
素早い茶色のキツネが怠け者の犬を飛び越えます
素早い茶色のキツネが怠け者の犬を飛び越えます
速い茶色のキツネが飛び越えます
バッファ 2 の内容
怠惰な犬
不要な CRLF がない場合、出力で 1 行が 2 つに分割されるという問題は発生しません。