次のコードで記述されたJava オブジェクトを含むファイルがあります。
from(somewhere).process(new Processor() {
@Override
public void process(final Exchange exchange) {
...
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(myObject);
exchange.getOut().setBody(bos.toByteArray());
}
}).to("file://pathFile");
さぁ、早く読みたい。どうすればそれができるのかわかりません。私が推測する次のコードのようなものです。
from("file://pathFile").convertBodyTo(String.class)
.split(body().tokenize("???")) // How can I tokenize my file ?
.streaming().threads(2)
.process(new Processor() {
@Override
public void process(final Exchange exchange) {
String filePath = (String) exchange.getIn().getHeader(Exchange.FILE_PATH);
File file = new File(filePath);
MyObject myObject = null;
try {
FileInputStream fis = new FileInputStream(file);
InputStream buffer = new BufferedInputStream(fis);
ObjectInput input = new ObjectInputStream(buffer);
Object obj = null;
while ((obj = input.readObject()) != null) {
// Do something
myObject = obj;
}
} catch (Exception e) {
...
} finally {
...
}
exchange.getIn().setBody(myObject);
}
}).to(somewhere);
編集:オブジェクトを読み取る方法を編集します。そのコードにはまだ問題があり、ObjectOutputStream に追加できません。これにより、ストリームが破損します。この問題の解決策 [ここ] があります。ストリーム ヘッダーは 1 回しか書き込めません。
しかし、そうすると、複数のスレッドでファイルを分割して読み取ることができなくなります。ObjectOutputStream ヘッダーでファイルを分割またはアクセスできますか?