1. 程式人生 > 其它 >HttpEntity型別有哪些

HttpEntity型別有哪些

代表底層流的基本實體。通常是在http報文中獲取的實體。他只有一個空參的構造方法。

剛建立時沒有內容,長度為負值。需要通過兩個方法,把值賦進去。

、、、
/**
* BasicHttpEntity
* @throws IOException
*/
public static void testBasicHttpEntity() throws IOException{
InputStream is = null;
//BasicHttpEntity這類就是一個輸入流的內容包裝類,包裝內容的相關的編碼格式,長度等
BasicHttpEntity entity = new BasicHttpEntity();
//設定內容
entity.setContent(is);
//設定長度
entity.setContentLength(is.available());
//沒搞懂chunked這個屬性啥意思
entity.setChunked(false);
}

、、、

ByteArrayEntity

是自我包含的,可重複獲得使用的,從指定的位元組陣列中取出內容的實體。

位元組陣列是這個實體的構造方法的引數

[html] view plain copy

/**
* ByteArrayEntity
* @throws IOException
/
public static void testByteArrayEntity() throws IOException{
ByteArrayEntity entity = new ByteArrayEntity("內容".getBytes());
ByteArrayInputStream is = (ByteArrayInputStream) entity.getContent();
//上面這行程式碼返回的其實是一個ByteArrayInputStream物件
/

public InputStream getContent() {
return new ByteArrayInputStream(this.b, this.off, this.len);
}*/
}

StringEntity

是自我包含的可重複的實體。通過String建立的實體

有兩個構造方法,一個是自Sring為引數的構造方法,一個是以String和字元編碼為引數的構造方法。

[html] view plain copy

/**
* StringEntity
* @throws IOException
*/
public static void testStringEntity() throws IOException{
StringBuilder sb = new StringBuilder();
//獲取系統的資訊集合,這個集合是不可以修改的
Map<String, String> nev = System.getenv();
for(Entry<String, String> entry : nev.entrySet()){
sb.append(entry.getKey()).append("=")
.append(entry.getValue()).append("\n");
}
String content = sb.toString();
System.out.println(content);
//建立只帶字串引數的
StringEntity entity = new StringEntity(content);
//建立帶字元創引數和字元編碼的
StringEntity entity2 = new StringEntity(content, "UTF-8");

}  

InputreamEntity

是流式不可以重複的實體。構造方法是InputStream 和內容長度,內容長度是輸入流的長度

[html] view plain copy

/**
* InputStreamEntity
* @throws IOException
*/
public static void testInputStreamEntity() throws IOException{
InputStream is = null;
//InputStreamEntity嚴格是對內容和長度相匹配的。用法和BasicHttpEntity類似
InputStreamEntity entity = new InputStreamEntity(is, is.available());
}

FileEntity

自我包含式,可以重複的實體。引數傳入檔案和檔案型別。

[html] view plain copy

/**
* FileEntity
* @throws IOException
*/
public static void testFileEntity() throws IOException{
FileEntity entity = new FileEntity(new File(""), ContentType.APPLICATION_FORM_URLENCODED);
FileEntity entity2 = new FileEntity(new File(""), "application/java-achive");

}  

EntityTemplete

從ContentProducer介面接受內容的實體。

在ContentProducer的實現類中寫入想要寫入的內容。

[html] view plain copy

/**
* EntityTemplate
* @throws IOException
*/
public static void testEntityTemplate() throws IOException{
ContentProducer producer = new ContentProducer() {

        @Override  
        public void writeTo(OutputStream outstream) throws IOException {  
            outstream.write("這是什麼東東》。".getBytes());  
        }  
    };  
      
    EntityTemplate entity = new EntityTemplate(producer);  
    entity.writeTo(System.out);  
}  

HttpEntityWrapper

這個是建立被包裝實體的基類,有被包裝實體的引用。

相當於實體的代理類,被包裝實體是他的一個屬性。

下面是這個類的原始碼:

[html] view plain copy

/*

  • ====================================================================
  • Licensed to the Apache Software Foundation (ASF) under one
  • or more contributor license agreements. See the NOTICE file
  • distributed with this work for additional information
  • regarding copyright ownership. The ASF licenses this file
  • to you under the Apache License, Version 2.0 (the
  • "License"); you may not use this file except in compliance
  • with the License. You may obtain a copy of the License at
  • http://www.apache.org/licenses/LICENSE-2.0
  • Unless required by applicable law or agreed to in writing,
  • software distributed under the License is distributed on an
  • "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  • KIND, either express or implied. See the License for the
  • specific language governing permissions and limitations
  • under the License.
  • ====================================================================
  • This software consists of voluntary contributions made by many
  • individuals on behalf of the Apache Software Foundation. For more
  • information on the Apache Software Foundation, please see
  • http://www.apache.org/.

*/

package org.apache.http.entity;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.annotation.NotThreadSafe;

/**

  • Base class for wrapping entities.

  • Keeps a {@link #wrappedEntity wrappedEntity} and delegates all

  • calls to it. Implementations of wrapping entities can derive

  • from this class and need to override only those methods that

  • should not be delegated to the wrapped entity.

  • @since 4.0
    */
    @NotThreadSafe
    public class HttpEntityWrapper implements HttpEntity {

    /** The wrapped entity. */
    protected HttpEntity wrappedEntity;

    /**

    • Creates a new entity wrapper.

    • @param wrapped the entity to wrap, not null

    • @throws IllegalArgumentException if wrapped is null
      */
      public HttpEntityWrapper(HttpEntity wrapped) {
      super();

      if (wrapped == null) {
      throw new IllegalArgumentException
      ("wrapped entity must not be null");
      }
      wrappedEntity = wrapped;

    } // constructor

    public boolean isRepeatable() {
    return wrappedEntity.isRepeatable();
    }

    public boolean isChunked() {
    return wrappedEntity.isChunked();
    }

    public long getContentLength() {
    return wrappedEntity.getContentLength();
    }

    public Header getContentType() {
    return wrappedEntity.getContentType();
    }

    public Header getContentEncoding() {
    return wrappedEntity.getContentEncoding();
    }

    public InputStream getContent()
    throws IOException {
    return wrappedEntity.getContent();
    }

    public void writeTo(OutputStream outstream)
    throws IOException {
    wrappedEntity.writeTo(outstream);
    }

    public boolean isStreaming() {
    return wrappedEntity.isStreaming();
    }

    /**

    • @deprecated (4.1) Either use {@link #getContent()} and call {@link java.io.InputStream#close()} on that;
    • otherwise call {@link #writeTo(OutputStream)} which is required to free the resources.
      */
      @Deprecated
      public void consumeContent() throws IOException {
      wrappedEntity.consumeContent();
      }

}

BufferedHttpEntity

是HttpEntityWarpper的子類,可以把不可以重複的實體,實現成可以重複的實體。

它從提供的實體中讀取內容,快取到內容中。

原始碼如下:

[html] view plain copy

/*

  • ====================================================================
  • Licensed to the Apache Software Foundation (ASF) under one
  • or more contributor license agreements. See the NOTICE file
  • distributed with this work for additional information
  • regarding copyright ownership. The ASF licenses this file
  • to you under the Apache License, Version 2.0 (the
  • "License"); you may not use this file except in compliance
  • with the License. You may obtain a copy of the License at
  • http://www.apache.org/licenses/LICENSE-2.0
  • Unless required by applicable law or agreed to in writing,
  • software distributed under the License is distributed on an
  • "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  • KIND, either express or implied. See the License for the
  • specific language governing permissions and limitations
  • under the License.
  • ====================================================================
  • This software consists of voluntary contributions made by many
  • individuals on behalf of the Apache Software Foundation. For more
  • information on the Apache Software Foundation, please see
  • http://www.apache.org/.

*/

package org.apache.http.entity;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.http.HttpEntity;
import org.apache.http.annotation.NotThreadSafe;
import org.apache.http.util.EntityUtils;

/**

  • A wrapping entity that buffers it content if necessary.

  • The buffered entity is always repeatable.

  • If the wrapped entity is repeatable itself, calls are passed through.

  • If the wrapped entity is not repeatable, the content is read into a

  • buffer once and provided from there as often as required.

  • @since 4.0
    */
    @NotThreadSafe
    public class BufferedHttpEntity extends HttpEntityWrapper {

    private final byte[] buffer;

    /**

    • Creates a new buffered entity wrapper.
    • @param entity the entity to wrap, not null
    • @throws IllegalArgumentException if wrapped is null
      */
      public BufferedHttpEntity(final HttpEntity entity) throws IOException {
      super(entity);
      if (!entity.isRepeatable() || entity.getContentLength() < 0) {
      this.buffer = EntityUtils.toByteArray(entity);
      } else {
      this.buffer = null;
      }
      }

    @Override
    public long getContentLength() {
    if (this.buffer != null) {
    return this.buffer.length;
    } else {
    return wrappedEntity.getContentLength();
    }
    }

    @Override
    public InputStream getContent() throws IOException {
    if (this.buffer != null) {
    return new ByteArrayInputStream(this.buffer);
    } else {
    return wrappedEntity.getContent();
    }
    }

    /**

    • Tells that this entity does not have to be chunked.
    • @return false
      */
      @Override
      public boolean isChunked() {
      return (buffer == null) && wrappedEntity.isChunked();
      }

    /**

    • Tells that this entity is repeatable.
    • @return true
      */
      @Override
      public boolean isRepeatable() {
      return true;
      }

    @Override
    public void writeTo(final OutputStream outstream) throws IOException {
    if (outstream == null) {
    throw new IllegalArgumentException("Output stream may not be null");
    }
    if (this.buffer != null) {
    outstream.write(this.buffer);
    } else {
    wrappedEntity.writeTo(outstream);
    }
    }

    // non-javadoc, see interface HttpEntity
    @Override
    public boolean isStreaming() {
    return (buffer == null) && wrappedEntity.isStreaming();
    }

} // class BufferedHttpEntity