这里可以选用Parcelable来进行序列化,parcelable效率更高,我这里选用的是serializable
服务端和客户端都要有此文件,并且所在的包名要一致
不懂可以参考parcelable(http://www.cnblogs.com/mydomainlistentome/p/4687173.html);
package lyl.sole.util; import java.io.Serializable; public class SerializUtil implements Serializable { private String title; private byte[] contentData; private long contentLength; private String ext; private String TypeMime; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public byte[] getContentData() { return contentData; } public void setContentData(byte[] contentData) { this.contentData = contentData; } public long getContentLength() { return contentLength; } public void setContentLength(long contentLength) { this.contentLength = contentLength; } public String getExt() { return ext; } public void setExt(String ext) { this.ext = ext; } public String getTypeMime() { return TypeMime; } public void setTypeMime(String typeMime) { TypeMime = typeMime; } }
客户端
package com.example.webfile; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectOutputStream; import java.net.Socket; import java.net.UnknownHostException; import lyl.sole.util.SerializUtil; import com.example.webfile.R.id; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { private Button send; private TextView show; private static final int FINISH = 0 ;//在主线程中更新UI private Handler handle = new Handler() { public void handleMessage(Message msg) { switch(msg.what) { case FINISH: String result = msg.obj.toString() ; // 取出数据 if ("true".equals(result)) { show.setText("操作成功!"); } else { show.setText("操作失败!"); } break ; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); send = (Button) findViewById(id.send); show = (TextView) findViewById(id.show); send.setOnClickListener(new sendFile()); } private class sendFile implements OnClickListener { public void onClick(View arg0) { Thread thread = new Thread(null, inThreadOn, "sendfile"); //在子线程中更新执行操作 thread.start(); } } private SerializUtil parcelFile() { SerializUtil serializ = new SerializUtil(); serializ.setTitle("小胡子"); serializ.setTypeMime("image/jpeg"); File file = new File(Environment.getExternalStorageDirectory() .toString() + File.separator + "head_8.png"); InputStream input = null; try { //读入图片 input = new FileInputStream(file); ByteArrayOutputStream output = new ByteArrayOutputStream(); byte[] data = new byte[1024]; int leng = 0; //读入字节数组 while ((leng = input.read(data)) != -1) { //读出 output.write(data, 0, leng); } //资源序列化
serializ.setContentData(output.toByteArray()); serializ.setContentLength(file.length()); serializ.setExt("png"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } return serializ; } public Runnable inThreadOn = new Runnable() { public void run() {//在子线程中执行网络操作 upLoadFile(); } }; private void upLoadFile() { try { final Socket client = new Socket("192.168.156.1", 8888); // 读取返回数据 BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(client.getInputStream())); //想服务端写数据 ObjectOutputStream oos = new ObjectOutputStream( client.getOutputStream()); SerializUtil getdata = parcelFile(); oos.writeObject(getdata); String result = null; result = bufferedReader.readLine(); oos.close(); //传message通知主线程跟新UI // Message msg=Message.obtain(); // msg.obj=result; // msg.sendToTarget(); Message msg=handle.obtainMessage(FINISH,result); msg.sendToTarget(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
服务端
import java.net.ServerSocket; public class Service { public static void main(String[] args) throws Exception { ServerSocket server=new ServerSocket(8888); boolean flag=true; while(flag){ // 启动线程 new Thread(new ServiceUtil(server.accept())).start(); } // 关闭 server.close(); } }
服务端存储
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.OutputStream; import java.io.PrintStream; import java.net.Socket; import java.util.UUID; import lyl.sole.util.SerializUtil; public class ServiceUtil implements Runnable { // 存储路径 private static final String DIRPATH = "D:" + File.separator + "android" + File.separator; private Socket client = null; private SerializUtil serializ = null; private int i = 0; public ServiceUtil(Socket client) { this.client = client; System.out.println("客户端连接" + i++); } @Override public void run() { PrintStream out; try { out = new PrintStream(client.getOutputStream()); // 反序列化 ObjectInputStream in = new ObjectInputStream( client.getInputStream()); serializ = (SerializUtil) in.readObject(); System.out.println("标题" + serializ.getTitle()); System.out.println("类型" + serializ.getTypeMime()); System.out.println("大小" + serializ.getContentLength()); out.print(saveFile()); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { this.client.close(); } catch (IOException e) { e.printStackTrace(); } } } private boolean saveFile() throws Exception { // 负责文件内容的保存 //UUID 通用唯一标识符 File file=new File(DIRPATH+UUID.randomUUID()+"."+this.serializ.getExt()); if(!file.getParentFile().exists()){ file.getParentFile().mkdir(); } OutputStream output=null; output=new FileOutputStream(file); output.write(this.serializ.getContentData()); return true; } }
权限、布局 就不粘了。
时间: 2024-10-12 17:14:38