Java HttpURLConnection 类

当预先知道内容长度时,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();
          }
       }
    } 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    让我们编译并运行上面的程序,这将产生以下结果 -

    输出

    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) 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    示例 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();
          }
       }
    } 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    让我们编译并运行上面的程序,这将产生以下结果 -

    输出

    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) 
    • 1
    • 2
    • 3
    • 4
    • 5

    示例 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();
          }
       }
    } 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    让我们编译并运行上面的程序,这将产生以下结果 -

    输出

    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) 
    • 1
    • 2
    • 3
    • 4
    • 5