import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.ContentConnection;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
// 第六章 开发无线网络应用程序
//Generic Connection Framework --通用连接框架
//GCF的特性:
// 基于接口设计,便于扩展,提供了创建连接的工厂方法 ,使用标准的url
// 各接口的作用:HttpConnection HttpsConnection 接口,使得MIDlet 具备了通过Http 或者Https 协议与server 通信的能力;
// 可选:SocketConnection / ServerSocketConnection、UDPDatagramConnection , 使得MIDlet 能够在TCP/IP 层通过Socket进行通信或者
// 使用数据报进行通信
// 现实世界使用的是:分组数据交换和电路交换 , 因此在联网框架中定义了 :DatagramConnection 和 StreamCononection;
// 在基于流的传输中我们要对输入流和输出流是具有操作能力的;StreamConnection 扩展了InputConnection 和OutputConnection; 打开:Con.opeanInputStream();
// SreamConnectionNotifier接口定义了连接监听器应该具备的能力;
public class SixSection_GCF extends MIDlet {
//准备需要使用到的数据类型
private ContentConnection connection = null;
private ByteArrayOutputStream baos = null; // 字节数据输出流
private Image image = null; //初始化图片
private byte[] imageData = null;
private DataInputStream dis = null; // 新建数据输出流
private Form form = new Form("下载图片");
private Display display ;
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stubs
}
protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
display = Display.getDisplay(this);
getImage("http://localhost:8080/imageSite/mv.jpg");
form.append(image);
display.setCurrent(form);
}
//下载图片
public void getImage(String url){
try{
//建立Http连接
connection = (ContentConnection) Connector.open(url);
//新建输入输入流
dis = connection.openDataInputStream();
//获得Http连接的长度
int length =(int) connection.getLength();
if(length!=-1){
imageData = new byte[length];
//使用流读取 --输入,读 /输出,写
dis.readFully(imageData); // 读取到数据
}else{
baos = new ByteArrayOutputStream();
int ch = 0;
while((dis.read())!=-1){
baos.write(ch);
imageData = baos.toByteArray();
}
}
image = Image.createImage(imageData, 0, imageData.length);
}catch(Exception exs){
exs.printStackTrace();
}finally{
//资源回收
try{
if(connection!=null){connection.close();}
if(dis!=null){
dis.close();
}
if(baos!=null){
baos.close();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
J2ME GCF--通用连接框架--图片下载
最新推荐文章于 2021-02-27 21:01:13 发布