我一直在阅读Java中的引用描述,虽然我觉得我理解它们,但我不确定Java是否允许我执行以下操作:我们在同一个JVM中有两个线程通过套接字进行通信,而我们想要在套接字上传递大部分数据的本地地址,而不复制数据本身。启动时解决方案可能非常明显,但我无法弄清楚!帮助将不胜感激。
答案 0 :(得分:1)
AFAIK Java没有提供获取对象内存引用的方法。可能对您有用的是使用共享数组或共享向量,将数据作为对象放入向量/数组中,并通过套接字传递对象的索引。
答案 1 :(得分:1)
这个插座上还有什么东西?如果它是您自己的协议,那么在协议中添加一个动词,说明“从已知位置获取大的东西”,然后发送动词。有多少这些物品?你能制作一个地图 - 字符串,对象 - 并将字符串传递给套接字吗?
答案 2 :(得分:0)
可能有可能使用JNI,但我认为纯Java不可能。
鉴于你是在同一个JVM中(并且这是你使它工作的唯一机会,除非你使用内存映射文件)你真的必须使用套接字吗?你不能创建一个更“直接”的API吗?
答案 3 :(得分:0)
有两种方法可以做到这一点。
使用更高效,更简单的直接API。我建议考虑一个BlockingQueue。
答案 4 :(得分:0)
如果要在同一程序的2个线程之间传递数据,只需通过java.concurrent包中的任何通道传递对该区域的引用。
如果您正在运行2个单独的程序,那么您必须序列化数据(如果您确实希望传递数据本身)。
如果您只想访问数据,则可以发布通过RMI执行所需转换的服务。