5
回答
Java解析HTTP协议的chunked编码
终于搞明白,存储TCO原来是这样算的>>>   

使用Socket 连接osc,响应头中没有包含Content-Length,得不到内容的长度,意味着我无法知道何时输出结束了,如果逐行读取,将导致阻塞,直到超时。

在响应头中看到Transfer-Encoding属性,它的值是chunked,网上查询后得知服务器分段响应了数据。可能比较麻烦,多次试验无果,又没有在网上获取到正确的解决方式。于是我尝试查看HttpURLConnection中的实现代码,备受挫败之后,才觉得自己是多么无知。

亲们,谁能指点迷津?

拜谢!

举报
布谷鸟
发帖于4年前 5回/3K+阅
共有5个答案 最后回答: 1年前

chunked 还是比较好处理的

可以反着看,它的报文是怎么构成的

 StringBuilder sb = new StringBuilder();  sb.append("HTTP/1.1 200 OK\r\n");  sb.append("Content-Type: text/plain\r\n");  sb.append("Transfer-Encoding: chunked\r\n\r\n");  sb.append("25\r\n");  sb.append("This is the data in the first chunk\r\n"); // 37 bytes of payload // (conveniently consisting of ASCII characters only)  sb.append("\r\n1A\r\n"); 
 sb.append("and this is the second one"); // 26 bytes of payload // (conveniently consisting of ASCII characters only)  sb.append("\r\n0\r\n\r\n");  CHUNKED_RESPONSE = sb.toString().getBytes(java.nio.charset.Charset.forName("US-ASCII"));

引用来自“kidding”的答案

chunked 还是比较好处理的

可以反着看,它的报文是怎么构成的

 StringBuilder sb = new StringBuilder();  sb.append("HTTP/1.1 200 OK\r\n");  sb.append("Content-Type: text/plain\r\n");  sb.append("Transfer-Encoding: chunked\r\n\r\n");  sb.append("25\r\n");  sb.append("This is the data in the first chunk\r\n"); // 37 bytes of payload // (conveniently consisting of ASCII characters only)  sb.append("\r\n1A\r\n"); 
 sb.append("and this is the second one"); // 26 bytes of payload // (conveniently consisting of ASCII characters only)  sb.append("\r\n0\r\n\r\n");  CHUNKED_RESPONSE = sb.toString().getBytes(java.nio.charset.Charset.forName("US-ASCII"));

一段一段读?想到了但是没头绪,束手无策。


顶部