Java:转换可丢弃/异常的最有效方法';将整个堆栈跟踪放入ByteBuffer?

Java:转换可丢弃/异常的最有效方法';将整个堆栈跟踪放入ByteBuffer?,java,exception,stack-trace,throwable,Java,Exception,Stack Trace,Throwable,将throwable/exception的整个堆栈跟踪转换为ByteBuffer(在Java中)最有效的方法是什么 具体来说,我需要将整个异常记录到数据库中。Thread.currentThread().getStackTrace()返回StackTraceeElement[]数组的列表 然后,在Throwable类中有一个printStackTrace()方法?您可以在apache commons中使用该类。如果您确实想这样做,这应该是您需要的: ByteArrayOutputStream o

将throwable/exception的整个堆栈跟踪转换为ByteBuffer(在Java中)最有效的方法是什么

具体来说,我需要将整个异常记录到数据库中。Thread.currentThread().getStackTrace()返回StackTraceeElement[]数组的列表


然后,在Throwable类中有一个printStackTrace()方法?

您可以在apache commons中使用该类。

如果您确实想这样做,这应该是您需要的:

ByteArrayOutputStream os = new ByteArrayOutputStream();
ex.printStackTrace(new PrintStream(os));
ByteBuffer bb = ByteBuffer.wrap(os.toByteArray());

在性能非常重要的地方,不要使用异常抛出代码。获取和格式化堆栈跟踪不是很有效。@gpeche-我认为完全避免异常不是一个好建议。如果与第三方LIB交易,这甚至可能不是一种选择。即使您的代码很慢,而且性能是一个问题,在考虑停止使用异常之前,可能还需要首先分析和优化一百万件其他事情。它们可能很慢,但没有那么慢。@Jesse Webb事实上,我更喜欢异常处理而不是替代方法,只是“将可丢弃/异常的整个堆栈跟踪转换为ByteBuffer的最有效方法”对我来说没有多大意义。有点像询问写入
System.out
的最有效方法。具体来说,应该使用
getFullStackTrace()
方法。它包括所有嵌套异常的堆栈,而
getStackTrace()
方法不包括。它返回一个字符串,可以轻松地将其转换为字节。