DataOutputStream вътрешно запазване на целия буфер?

В следния код. Чета файл в малък буфер ( len=CHUNK_SIZE) И просто искам да запиша този буфер в изходния поток. Но въпреки че промивам след всяко парче, получавам изключение за препълване на купчина. Е, ако искам да предавам поточно малки файлове, всичко е наред. Но не трябва ли flush да изтрива и всички данни в потока?

URL url = new URL(built);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setDoOutput(true);
con.setDoInput(true);
con.setUseCaches(false);
//con.setChunkedStreamingMode(CHUNK_SIZE);
con.setRequestProperty("Content-Type", "multipart/form-data; boundary="
                                + Boundary);

FileInputStream is = new FileInputStream(m_FileList.get(i));
DataOutputStream os = new DataOutputStream(con.getOutputStream());

 // .....

 while((read = is.read(temp, 0, CHUNK_SIZE)) != -1) {
      bytesTotal += read;

      os.write(temp, 0, read); // heap overflow here if the file is to big
      os.flush();                             
 }

person Aurus    schedule 18.11.2012    source източник


Отговори (1)


DataOutputStream изобщо не буферира, но изходният поток на HttpURLConnection буферира всичко по подразбиране, така че може да зададе заглавката Content-Length. Използвайте режим на прехвърляне на парчета, за да предотвратите това.

Тук всъщност изобщо не се нуждаете от DataOutputStream: просто пишете в изходния поток на връзката.

Не flush() също вътре в цикъла.

person user207421    schedule 18.11.2012