将异常的堆栈跟踪转换为 byte[] 数组还是 ByteBuffer (Java) 更有效?



我需要将异常记录到数据库中。数据库 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。

最有效的选择是两者的结合。

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

尽管我怀疑将其写入数据库的成本会高出许多倍。

最新更新