2012-02-11 97 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