Sorry, my code is not correct. It might read more than expected when contentLength != -1
while (total < contentLength) { if (total >= resp.len) { resp = Arrays.copyOf(resp, resp.len*2); } count = in.read(resp, total, resp.len-total) if (count < 0) break; total += count; } Weijun Wang wrote: > I understand what the code means. It either reads contentLength bytes of > data, or, if it's -1, reads until EOF. > > However, I guess it would look simpler if you use only one while(read): > > if (contentLength == -1) { > resp = new byte[contentLength]; > } else { > resp = new byte[2048]; > contentLength = Integer.MAX_VALUE; > } > while (total < contentLength) { > count = in.read(resp, total, resp.len-total) > if (count < 0) break; > total += count; > if (total almost exceeds resp len) { > resp = Arrays.copyOf(resp, resp.len*2); > } > } > > Also, I guess the response should be truncated back to total after the > reading is complete. > > response = Arrays.copyOf(response, total); > > Thanks > Max > > Xuelei Fan wrote: >> Hi, >> >> bug desc: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6853793 >> webrv: http://cr.openjdk.java.net/~xuelei/6853793/webrev/ >> >> no new regression test, trivial changes, hard to write a new test. >> >> Thanks, >> Xuelei