【发布时间】:2012-02-11 04:59:56
【问题描述】:
如何将用Delphi编写的具体代码转换成JAVA
try
LLine := TMemoryStream.Create;
IdTCPClient1.IOHandler.WriteLn('atext');
IdTCPClient1.IOHandler.ReadStream(LLine, -1);
LLine.Position := 0;
LLine.Read(intval, 4); //the server is sending memstream as integer + ajpeg image
Image1.Picture.Graphic.LoadFromStream(LLine);
finally
//free
end;
上面的代码与 Delphi 完美配合,但现在我也想创建一个 java 客户端,但我自己的转换给了我错误(java)
Image image = null ;
Socket socket = new Socket(someIP, myport);
我的转化是
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
String string = "atext\n";
byte buffer[] = string.getBytes();
out.write(buffer);
in.skip(4); // i don't want the integer
image = ImageIO.read(in);
服务器正在完美地获取文本 atext,但我的 java 客户端总是出现问题,图像总是显示空值(我分配了一个断点并检查了它);
【问题讨论】:
-
使用 image = ImageIO.read(in); 是否正确
-
我不太懂 Java,但你不应该做一些类似 Image image = ImageIO.read(in); 的事情吗?我的意思是,您需要定义“图像”变量的类型,还需要输入 System.Out.print(in.size());向控制台输出服务器正在发送的字节数,以确保服务器正在发送一些字节。
-
没问题,但请编辑您的问题,以便其他人无需阅读 cmets 也能知道,您是否设法测试服务器是否真的在发送图像字节?
-
现在我们到了某个地方,请看这里的答案stackoverflow.com/questions/4478438/… 并使用从输入流复制到字节缓冲区流,基本上输入流使用8KB 缓冲区
-
不完全是,这意味着调用 .available() 时缓冲区将返回的最小大小为 8KB,即使“真实”数据大小为 1 字节
标签: java delphi sockets jpeg indy