2012-03-19 71 views
1

我的Java服务器正在接收来自android应用程序的Canvas对象,并且我试图将此对象发送给其他应用程序。是否有可能在服务器不知道该对象包含什么内容的情况下发送该消息,并且只是简单地转发该对象而不存储它?Java - 转发对象

谢谢

+0

umm ...'RequestDispatcher#forward(request,response)'不适合你的需要吗? – Nishant 2012-03-19 16:43:58

+1

如果你的意思是通过套接字发送任何对象 - 除非你能[序列化](http://en.wikipedia.org/wiki/Serialization#Java)它不工作。在使用ipc时,Android在内部使用[parcelable](http://developer.android.com/reference/android/os/Parcelable.html) – zapl 2012-03-19 16:49:27

回答

2

画布不是可序列化的,所以你将无法做到这一点。

http://developer.android.com/reference/android/graphics/Canvas.html

存在画布对象,你将无法捕捉到,即使你写你自己的序列化方案私有状态。

你需要考虑一些其他的数据结构,可你。例如,位图可以被编码并写入流中,并因此通过网络传输。

这里谈到有关保存画布成位图,然后进入一个jpg后,

Image on canvas to JPEG file

为转发而不存储,可以存储任何你在内存中要,所以这不是问题。你确实需要考虑服务器上的负载。如果遇到内存中有大量图像数据的情况。这会耗尽服务器上的资源。

作为发送到其他应用程序,你将需要发送C2DM推送消息到目标设备/应用程序,说:“有什么东西适合你的服务器上,来得到它”。例如,当一个应用程序将数据放到服务器上时,就会有一个ID。 C2DM包含此ID,因此目标应用会使用该ID执行GET以检索关联的图像。请注意,图像数据将无限期地在内存中悬挂,因为无法保证何时或如果C2DM推送到达所有目标设备。将数据写入永久性存储(如数据库或文件系统)(如果只是暂时的)可能是有意义的。

+0

在这种情况下,可以发送包含路径和绘画的对象,然后可以用它在另一端画在画布上? – 2012-03-19 17:50:53

+0

既不可路径也不可绘制可序列化。我不知道你的应用程序,所以你需要看看你需要捕获什么来恢复你在另一端需要的东西。虽然路径和绘画是不可序列化的,但如果你可以从他们的getter获得你想要的东西,那么你可以建立你自己的“传输”对象,这个对象是可序列化的,可以用来重新构建你需要的对象。 – 2012-03-19 18:55:15