0

XML ファイルを読み取って、HttpPost を使用してローカル サーバーに送信しようとしています。サーバー側でデータを読み取ってファイルに書き込む場合、常に最後の数行が欠落しています。

クライアントコード:

  HttpClient httpclient = new DefaultHttpClient();
  HttpPost httppost = new HttpPost("http://xxx.xxx.xxx.xxx:yyyy/FirstServlet/HelloWorldServlet");      
  InputStreamEntity reqEntity = new InputStreamEntity(
  new FileInputStream(dataFile), -1);
  reqEntity.setContentType("binary/octet-stream");

  // Send in multiple parts if needed
  reqEntity.setChunked(true);
  httppost.setEntity(reqEntity);
  HttpResponse response = httpclient.execute(httppost);
  int respcode =  response.getStatusLine().getStatusCode();

サーバーコード:

    response.setContentType("binary/octet-stream");
    InputStream is = request.getInputStream();
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("C:\\Files\\copyFile.xml")));
    byte[] buf = new byte[4096];
    for (int nChunk = is.read(buf); nChunk!=-1; nChunk = is.read(buf))
    {
        bos.write(buf, 0, nChunk);
    } 

BufferedReader も使用してみましたが、同じ問題です。

    BufferedReader in = new BufferedReader(  
            new InputStreamReader(request.getInputStream()));
    response.setContentType("binary/octet-stream");  
    String line = null;  
         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("C:\\Files\\copyFile.xml")));
         while((line = in.readLine()) != null) {
             line = in.readLine();
             bos.write((line + "\n").getBytes());
    }  

スキャナーも使ってみました。この場合、StringBuilder を使用して値を BufferedOutputStream に再度渡す場合にのみ正常に動作します。

    response.setContentType("binary/octet-stream");
    StringBuilder stringBuilder = new StringBuilder(2000);
    Scanner scanner = new Scanner(request.getInputStream());
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("C:\\Files\\copyFile.xml")));
    while (scanner.hasNextLine()) {
        stringBuilder.append(scanner.nextLine() + "\n");
    }
    String tempStr = stringBuilder.toString();
    bos.write(tempStr.getBytes());

文字列値に変換すると Java ヒープ スペース エラーがスローされるため、上記のロジックを非常に大きな XML の処理に使用することはできません。

コードの何が問題なのか教えてください。

前もって感謝します!

4

1 に答える 1