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

ike*_*8me 1 java bytebuffer bytearray stack-trace printstacktrace

我需要将异常记录到数据库中.数据库API声明我可以将值作为ByteBuffer传递或作为byte []数组传递.哪个更有效率?

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

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

我认为如果我使用ByteBuffer,整体操作会更有效,特别是在它被传递到数据库方法后处理它时.我对吗?

(具体来说,我需要将异常记录到Hypertable中,它使用Thrift Java API.)

Pet*_*rey 9

最有效的选择就是将两者结合起来.

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

虽然我怀疑将它写入数据库会贵很多倍.