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物件
/
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