Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过RMI传递InputStream?_Java_Ejb 3.0 - Fatal编程技术网

Java 如何通过RMI传递InputStream?

Java 如何通过RMI传递InputStream?,java,ejb-3.0,Java,Ejb 3.0,默认情况下,InputStream未序列化。如何通过RMI传递InputStream以访问EJB?您必须将数据读入字节数组,或者全部读入一个数组,或者读入多个数组(取决于读取的数据大小),然后通过RMI传递这些字节数组。未读取的InputStream不是可以直接传递的数据 你不能。假设InputStream从磁盘读取一个文件,并将其作为方法参数发送给另一台机器上JVM上执行的EJB。在另一台计算机上反序列化时,该InputStream没有意义 你需要考虑潜在的问题,而不是机制。您需要将Input

默认情况下,InputStream未序列化。如何通过RMI传递InputStream以访问EJB?

您必须将数据读入字节数组,或者全部读入一个数组,或者读入多个数组(取决于读取的数据大小),然后通过RMI传递这些字节数组。未读取的InputStream不是可以直接传递的数据

你不能。假设InputStream从磁盘读取一个文件,并将其作为方法参数发送给另一台机器上JVM上执行的EJB。在另一台计算机上反序列化时,该InputStream没有意义

你需要考虑潜在的问题,而不是机制。您需要将InputStream读入一个可序列化对象(比如一个byte[]数组)并传递该对象


如果InputStream读取的内容对于内存来说太大,那么您需要将其包装在一个可序列化对象中,传递该对象,并使该对象能够在另一端创建InputStream(当然,假设它可以-否则您必须创建自己的流,这是一个完全不同的问题).

在他的回答中@Konstantin写道:

未读取的InputStream不是可以直接传递的数据

正是

例如,如果您试图为一个被调用为“java appSystem.in的内容,您认为会发生什么?(提示:读“是的”)

如果希望通过RMI“传递”流,可以创建一个实现流API的包装器类,并对原始流对象执行RMI回调以读取或写入数据。您需要安排流包装器的序列化状态包含执行回调的句柄


但是,客户端更明智的做法是显式读取整个流内容,并将其作为字节(或字符)数组或缓冲区传递给服务器。

这就像试图通过电话线发送电话一样。它没有意义,

可能重复