当预先知道内容长度时,Java HttpURLConnection setFixedLengthStreamingMode() 方法可以在没有内部缓冲的情况下流式传输 HTTP 请求正文。
如果应用程序尝试写入超过指定内容长度的数据,或者应用程序在写入指定数量之前关闭了 OutputStream。
声明
以下是 java.net.HttpURLConnection.setFixedLengthStreamingMode() 方法的声明
public void setFixedLengthStreamingMode(int contentLength)
参数
contentLength - 将写入OutputStream的字节数.
返回值
无
异常
IllegalStateException - 如果 URLConnection 已连接或者如果已启用不同的流模式。
IllegalArgumentException - 如果指定的内容长度小于零。
示例 1
以下示例显示了使用 Java HttpURLConnection setFixedLengthStreamingMode() 方法获取 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.setFixedLengthStreamingMode(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: insufficient data written
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.close(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at com.yxjc123.HttpUrlConnectionDemo.main(HttpUrlConnectionDemo.java:18)
示例 2
以下示例显示使用 Java HttpURLConnection setFixedLengthStreamingMode() 方法获取具有 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.setFixedLengthStreamingMode(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: insufficient data written
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.close(Unknown Source)
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)
示例 3
以下示例显示使用 Java HttpURLConnection setFixedLengthStreamingMode() 方法获取具有 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.setFixedLengthStreamingMode(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: insufficient data written
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.close(Unknown Source)
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)