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();
如何將一個存儲在開始的整體要求,不鬆的過程中的任何字節,並能夠檢查的內容,從中提取二進制數據?
我不認爲它會解決我的問題。我的猜測是我在將int轉換爲char時丟失了數據:httpRequestString + =(char)in.read(); –