【问题标题】:Delphi to Java code conversionDelphi到Java代码转换
【发布时间】: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


【解决方案1】:

ImageIO.read(InputStream input) 文档说:

如果没有注册的 ImageReader 声称能够读取结果 流,返回null。

所以在这种情况下,空值似乎是正常的。您是否检查过匹配的 ImageReader 是否已注册? (例如通过加载现有的有效参考图像文件)

【讨论】:

  • 您如何验证 ImageReader 是否已注册?加载相同类型图像的其他方法可以正常工作吗?例如使用ImageIO.read(URL input)
  • 我已经分配了一个图像并且它显示了图像,但是在分配输入流之后它变得空白
  • 然后我会先尝试将图像数据保存到本地文件并检查它是否是有效的图像文件(使用普通查看器应用程序)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2011-09-08
相关资源
最近更新 更多