2014-02-22 83 views
1

因此,我有一個處理連接請求的網絡服務器,將整個請求存儲到字符串(問題依賴於我相信的地方),在進行任何類型的處理。從服務器端讀取二進制數據的Java serversocket(http)

 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); 

     // Loop here until there is no more to read, but wait until the first message arrives. 
     while (in.ready() || httpRequestString.isEmpty()) { 
      // Read one integer at the time and cast it to a character. 
      httpRequestString += (char) in.read(); 

     } 

然後將其發送到HttpRequest類來檢查它,如果它是一個POST,將二進制數據保存到文件中。

可以正常使用文本文件,而不會使用損壞的二進制文件。

我知道你不應該一行一行地閱讀二進制文件(特別是用掃描儀),並用printwriter寫它,但我必須檢查請求並尋找文件內容的起始和結束邊界,因此我想出了快速的臨時代碼,只是去展示我的東西。

scanner = new Scanner(body); 
while (scanner.hasNextLine()) { 
    String line = scanner.nextLine(); 
    if (line.equals("--" + boundary)) { 
     fileName = scanner.nextLine().split("filename=")[1].replaceAll("\"", ""); 
     fileType = scanner.nextLine(); 
     scanner.nextLine(); //empty line 

     PrintWriter fileOutput = new PrintWriter(rootFolder + File.separator + fileName); 
     //FileOutputStream fileOutput1= new FileOutputStream(new File(rootFolder + File.separator + fileName)); 
     String prev = scanner.nextLine(); 

     while (scanner.hasNextLine()){ 
      String next = scanner.nextLine(); 
      System.out.println("reading from: " + prev); 
      if (!(next.equals("--" + boundary + "--"))){ 
       fileOutput.println(prev); 
       prev = next; 
      } 
      else { 
       fileOutput.print(prev); 
       break; 
      } 
     } 
     fileOutput.close(); 
    } 
} 
scanner.close(); 

如何將一個存儲在開始的整體要求,不鬆的過程中的任何字節,並能夠檢查的內容,從中提取二進制數據?

回答

0

通過閱讀你的java源代碼,你似乎嘗試解析一個MIME multipart響應。可能你應該考慮使用java.mail API。這裏是一個關於這個API的帖子的鏈接:Read multipart/mixed response in Java/Groovy

+1

我不認爲它會解決我的問題。我的猜測是我在將int轉換爲char時丟失了數據:httpRequestString + =(char)in.read(); –

相關問題