当内容长度事先未知时,Java HttpURLConnection setChunkedStreamingMode() 方法允许在没有内部缓冲的情况下流式传输 HTTP 请求正文。在此模式下,使用分块传输编码来发送请求正文。请注意,并非所有 HTTP 服务器都支持此模式。
启用输出流时,无法自动处理身份验证和重定向。如果需要身份验证或重定向,则读取响应时将抛出 HttpRetryException。可以查询该异常,了解错误的详细信息。该方法必须在 URLConnection 连接之前调用。
声明
以下是 java.net.HttpURLConnection.setChunkedStreamingMode() 方法的声明
public void setChunkedStreamingMode(int chunklen)
参数
chunklen - 每个块中要写入的字节数。如果 chunklen 小于或等于 0,则将使用默认值。
返回值
无
异常
IllegalStateException - 如果 URLConnection 已连接或已启用不同的流模式。
示例 1
以下示例显示 Java HttpURLConnection setChunkedStreamingMode( 的用法) ) 使用 https 协议获取有效 url 的方法。在此示例中,我们将创建 URL 类的实例。使用 url.openConnection() 方法,我们获取 HttpURLConnection 实例。使用 getInputStream(),我们获取网站主页的内容并打印相同的内容 -
package com.yxjc123;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpUrlConnectionDemo {
public static void main(String [] args) {
try {
URL url = new URL("https://www.yxjc123.com/index1.htm?language=en#j2se");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setChunkedStreamingMode(1000);
urlConnection.setDoOutput(true);
urlConnection.connect();
System.out.println("Connected.");
if(urlConnection.getInputStream() != null) {
BufferedReader in = new BufferedReader(
new InputStreamReader(urlConnection.getInputStream()));
String content = "";
String current;
while((current = in.readLine()) != null) {
content += current;
}
System.out.println(content);
}else {
System.out.println("Input Stream is null");
}
urlConnection.disconnect();
System.out.println("Disconnected.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
让我们编译并运行上面的程序,这将产生以下结果 -
输出
Connected.
<!DOCTYPE html><html lang="en"><head><title>Online Tutorials Library....
Disconnected.
示例 2
以下示例显示使用 Java HttpURLConnection setChunkedStreamingMode() 方法获取具有 http 协议的有效 url。在此示例中,我们将创建 URL 类的实例。使用 url.openConnection() 方法,我们获取 HttpURLConnection 实例。使用 getInputStream(),我们获取网站主页的内容并打印相同的内容 -
package com.yxjc123;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpUrlConnectionDemo {
public static void main(String [] args) {
try {
URL url = new URL("http://www.yxjc123.com/index1.htm?language=en#j2se");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setChunkedStreamingMode(1000);
urlConnection.setDoOutput(true);
urlConnection.connect();
System.out.println("Connected.");
if(urlConnection.getInputStream() != null) {
BufferedReader in = new BufferedReader(
new InputStreamReader(urlConnection.getInputStream()));
String content = "";
String current;
while((current = in.readLine()) != null) {
content += current;
}
System.out.println(content);
}else {
System.out.println("Input Stream is null");
}
urlConnection.disconnect();
System.out.println("Disconnected.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
让我们编译并运行上面的程序,这将产生以下结果 -
输出
Connected.
<!DOCTYPE html><html lang="en"><head><title>Online Tutorials Library....
Disconnected.
示例 3
以下示例显示使用 Java HttpURLConnection setChunkedStreamingMode() 方法获取具有 http 协议的有效 url。在此示例中,我们将创建 URL 类的实例。使用 url.openConnection() 方法,我们获取 HttpURLConnection 实例。使用 getInputStream(),我们获取网站主页的内容并打印相同的内容 -
package com.yxjc123;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpUrlConnectionDemo {
public static void main(String [] args) {
try {
URL url = new URL("http://www.baidu.com");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setChunkedStreamingMode(1000);
urlConnection.setDoOutput(true);
urlConnection.connect();
System.out.println("Connected.");
if(urlConnection.getInputStream() != null) {
BufferedReader in = new BufferedReader(
new InputStreamReader(urlConnection.getInputStream()));
String content = "";
String current;
while((current = in.readLine()) != null) {
content += current;
}
System.out.println(content);
}else {
System.out.println("Input Stream is null");
}
urlConnection.disconnect();
System.out.println("Disconnected.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
让我们编译并运行上面的程序,这将产生以下结果 -
输出
Connected.
java.io.IOException: Server returned HTTP response code: 405 for URL: http://www.baidu.com
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at com.yxjc123.HttpUrlConnectionDemo.main(HttpUrlConnectionDemo.java:18)