メッセージのn個の部分を含むマップをバイト配列として取得しました。最後の部分がマップに入った後、メッセージを連結する必要があります。要件を満たす必要がある2つのソリューションが見つかりました。まず一つはSystem.arraycopyのを使用している:最も速いバイト配列連結方法
public byte[] getMessageBytes() throws IOException {
byte[] bytes = new byte[0];
for (final Map.Entry<Short,byte[]> entry : myMap.entrySet()) {
byte[] entryBytes = entry.getValue();
byte[] temp = new byte[bytes.length + entryBytes.length];
System.arraycopy(bytes, 0, temp, 0, bytes.length);
System.arraycopy(entryBytes, 0, temp, bytes.length, entryBytes.length);
bytes = temp;
}
return bytes;
}
そしてもう一つはByteArrayOutputStreamを使用している:
public byte[] getMessageBytes() throws IOException {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (final Map.Entry<Short,byte[]> entry : myMap.entrySet()) {
baos.write(entry.getValue());
}
baos.flush();
return baos.toByteArray();
}
パフォーマンスとメモリ使用量の角度から見て、より良い方法は何ですか? さらに優れた連結を実行する別の方法はありますか?
これらのベンチマークを行い、十分に高速ではないことがわかりましたか? – Poindexter
これは本当にあなたのボトルネックですか? – ControlAltDel
@Poindexterマップにたくさんのエントリがある場合、ホールプロセス内で時間がかかることがわかりました。だから私は改善を探した。 – sebastian