Java 9为ObjectInputStreams
添加了一些反序列化安全措施,除了更广泛使用的措施(如类的白/黑列表)之外,还添加了一些大小限制:arrayLength
,{ {1}},depth
,references
。
数组长度和深度很简单,但您如何正确使用streamBytes
?文档说:references
,但这些引用存储在哪里?它不是InputStream中当前引用的数量。如果我通过流发送一次性使用实例并且不再需要它,我会期望该数字再次下降,至少在它被垃圾收集时。我意识到ObjectStreams维护一个The current number of object references
,默认情况下存储实例及其引用,但即使使用HandleTable
来避免这种情况,问题仍然存在。根据我的测试,我从未见过引用计数会下降(同样适用于readUnshared/writeUnshared
)。
如果这个数字真的没有下降,你将如何处理连续发送数据的应用程序?即使您能够发送所有内容streamBytes
以便您可以跟踪对象何时完成,您将如何确定该对象的unshared
?
示例:
streamBytes