在Matlab中从Java DataInputStream中阅读数据,以快速传输大量数据

yhqotfr8  于 8个月前  发布在  Matlab
关注(0)|答案(2)|浏览(99)

我试图通过TCP读取数据到matlab使用Java类。我在网上看到的所有这方面的内容都使用java.io.DataInputStream.readbyte()方法将数据从tcp数据流拉入matlab。对于我试图流式传输的非常大量的数据来说,这太慢了(大约是1000倍)。
我想使用java.io.DataInputStream.read(byte b[])方法会快得多。但是,我似乎不能强迫它工作。
例如,我尝试在matlab中创建java字节数组

jbytes = javaArray('java.lang.Byte',8)

然后创建一个DataInputStream对象并尝试使用read方法

dataInputStream.read(jbytes)

我得到错误:
未找到类“java.io.DataInputStream”的具有匹配签名的方法“read”
根据Matlab文档,我应该可以做到这一点。
谢谢你的帮助。

laximzn5

laximzn51#

[8] new byte []; Byte类是原始字节的 Package 器,它是DataInpuStream.read(byte [])的必需参数。

wtlkbnrh

wtlkbnrh2#

这个问题是9年前产生的,但也许我的解决方案会帮助别人。
我写了一个小的 Package 类来读取所有可用的字节到公共缓冲区。

public class ByteInputStream extends java.io.FilterInputStream
{
  public byte[] Buffer = new byte[65536];
  
  public ByteInputStream(java.io.InputStream IS)
  {
    super(IS);
  }

  public int readAll() throws java.io.IOException
  {
    return this.read(Buffer);
  }
}

这个文件用javac编译后,你可以在Matlab中使用它,比如:

Socket = java.net.Socket('127.0.0.1', 123);
SocketIn = this.Socket.getOutputStream();
SocketOut = ByteInputStream(this.Socket.getInputStream());
if SocketOut.available() > 0
  NumBytes = SocketOut.readAll();
  Buffer = Socket.Buffer(1:NumBytes);
  disp(Buffer);
end

相关问题