2012-02-11 100 views
1

我如何转换用Delphi编写的,以JAVA德尔福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; 

上面的代码工作完美地与德尔福的特定代码,但现在我想得创建一个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); 

服务器总体性他完美的文本文本,但我的Java客户端有问题总是图像显示空值(我分配了一个断点,并检查它);

+0

是否正确使用image = ImageIO.read(in); – VibeeshanRC 2012-02-11 05:02:14

+0

我对Java不太了解,但不应该像Image image = ImageIO.read(in);?我的意思是,你需要定义“图像”变量的类型,也可以把类似System.Out.print(in.size());向控制台输出服务器发送的字节数,以确保服务器正在发送一些字节。 – ComputerSaysNo 2012-02-11 05:28:18

+0

没有问题,但请编辑您的问题,以便其他人知道而不必阅读评论,您是否设法测试服务器是否实际发送图像字节? – ComputerSaysNo 2012-02-11 05:36:06

回答

0

ImageIO.read(InputStream input)文件说:

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

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

+0

我做到了,什么都没有发生 – VibeeshanRC 2012-02-11 09:23:23

+0

你是如何确认ImageReader已注册的?做其他方式来加载相同类型的图像工作正常吗?例如使用[ImageIO.read(URL输入)](http://docs.oracle.com/javase/1.4.2/docs/api/javax/imageio/ImageIO.html#read%28java.net.URL%29 ) – mjn 2012-02-11 09:39:04

+0

我已经分配了一个图像,它显示的图像,但分配输入流后它变得空白 – VibeeshanRC 2012-02-11 09:49:12