2

例外をデータベースに記録する必要があります。データベース API は、値を ByteBuffer または byte[] 配列として渡すことができると述べています。では、どちらがより効率的ですか?

private final static byte[] getThrowableStackTraceBytes(Throwable throwable) {
    StringWriter throwableStackTraceStringWriter = new StringWriter();
    throwable.printStackTrace(new PrintWriter(throwableStackTraceStringWriter));
    return throwableStackTraceStringWriter.toString().getBytes();
}

対。

private final static ByteBuffer getThrowableStackTraceByteBuffer(Throwable throwable) {
    ByteArrayOutputStream throwableStackTraceByteArrayOutputStream = new ByteArrayOutputStream();
    throwable.printStackTrace(new PrintStream(throwableStackTraceByteArrayOutputStream));
    ByteBuffer throwableByteBuffer = ByteBuffer.wrap(throwableStackTraceByteArrayOutputStream.toByteArray());
    return throwableByteBuffer;
}

ByteBuffer を使用すると、特にデータベース メソッドに渡された後に処理される場合に、全体的な操作がより効率的になると思います。私は正しいですか?

(具体的には、例外を Hypertable に記録する必要があり、Thrift Java API を使用します。)

4

1 に答える 1

10

最も効率的なオプションは、2 つの組み合わせのようなものです。

private final static byte[] getThrowableStackTraceBytes(Throwable throwable) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    throwable.printStackTrace(new PrintStream(baos));
    return baos.toByteArray();
}

ただし、データベースに書き込むと、何倍も費用がかかると思います。

于 2012-09-19T17:10:44.217 に答える