PC客户端与Android服务端的Socket同步通信
需求:
1.一个android端的service后台运行的程序,作为socket的服务器端;用于接收Pc client端发来的命令,来处理数据后,把结果发给PC client
2.PC端程序,作为socket的客户端,用于给android手机端发操作命令
难点分析:
1.手机一定要有adb模式,即插上USB线时马上提示的对话框选adb。好多对手机的操作都可以用adb直接作。
不过,我发现LG GW880就没有,要去下载个
2.android默认手机端的IP为“127.0.0.1”
3.要想联通PC与android手机的sokcet,一定要用adb forward 来作下端口转发才能连上socket.
[java] view plain copy
- Runtime.getRuntime().exec("adbforwardtcp:12580tcp:10086");
- Thread.sleep(3000);
4.android端的service程序Install到手机上容易,但是还要有方法来从PC的client端来启动手机上的service ,这个办法可以通过PC端adb命令来发一个Broastcast,手机端再写个接收BroastcastReceive来接收这个Broastcast,在这个BroastcastReceive来启动service
pc端命令:
[java] view plain copy
- Runtime.getRuntime().exec(
- "adbshellambroadcast-aNotifyServiceStart");
android端的代码:ServiceBroadcastReceiver.java
[java] view plain copy- packagecom.otheri.service;
- importandroid.content.BroadcastReceiver;
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.util.Log;
- publicclassServiceBroadcastReceiverextendsBroadcastReceiver{
- privatestaticStringSTART_ACTION="NotifyServiceStart";
- privatestaticStringSTOP_ACTION="NotifyServiceStop";
- @Override
- publicvoidonReceive(Contextcontext,Intentintent){
- Log.d(androidService.TAG,Thread.currentThread().getName()+"---->"
- +"ServiceBroadcastReceiveronReceive");
- Stringaction=intent.getAction();
- if(START_ACTION.equalsIgnoreCase(action)){
- context.startService(newIntent(context,androidService.class));
- Log.d(androidService.TAG,Thread.currentThread().getName()+"---->"
- +"ServiceBroadcastReceiveronReceivestartend");
- }elseif(STOP_ACTION.equalsIgnoreCase(action)){
- context.stopService(newIntent(context,androidService.class));
- Log.d(androidService.TAG,Thread.currentThread().getName()+"---->"
- +"ServiceBroadcastReceiveronReceivestopend");
- }
- }
- }
5.由于是USB连接,所以socket就可以设计为一但连接就一直联通,即在new socket和开完out,in流后,就用个while(true){}来循环PC端和android端的读和写
android的代码:
[java] view plain copy- publicvoidrun(){
- Log.d(androidService.TAG,Thread.currentThread().getName()+"---->"
- +"aclienthasconnectedtoserver!");
- BufferedOutputStreamout;
- BufferedInputStreamin;
- try{
- /*PC端发来的数据msg*/
- StringcurrCMD="";
- out=newBufferedOutputStream(client.getOutputStream());
- in=newBufferedInputStream(client.getInputStream());
- //testSocket();//测试socket方法
- androidService.ioThreadFlag=true;
- while(androidService.ioThreadFlag){
- try{
- if(!client.isConnected()){
- break;
- }
- /*接收PC发来的数据*/
- Log.v(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"willread......");
- /*读操作命令*/
- currCMD=readCMDFromSocket(in);
- Log.v(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"**currCMD===="+currCMD);
- /*根据命令分别处理数据*/
- if(currCMD.equals("1")){
- out.write("OK".getBytes());
- out.flush();
- }elseif(currCMD.equals("2")){
- out.write("OK".getBytes());
- out.flush();
- }elseif(currCMD.equals("3")){
- out.write("OK".getBytes());
- out.flush();
- }elseif(currCMD.equals("4")){
- /*准备接收文件数据*/
- try{
- out.write("servicereceiveOK".getBytes());
- out.flush();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- /*接收文件数据,4字节文件长度,4字节文件格式,其后是文件数据*/
- byte[]filelength=newbyte[4];
- byte[]fileformat=newbyte[4];
- byte[]filebytes=null;
- /*从socket流中读取完整文件数据*/
- filebytes=receiveFileFromSocket(in,out,filelength,
- fileformat);
- //Log.v(Service139.TAG,"receivedata="+new
- //String(filebytes));
- try{
- /*生成文件*/
- Filefile=FileHelper.newFile("R0013340.JPG");
- FileHelper.writeFile(file,filebytes,0,
- filebytes.length);
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }elseif(currCMD.equals("exit")){
- }
- }catch(Exceptione){
- //try{
- //out.write("error".getBytes("utf-8"));
- //out.flush();
- //}catch(IOExceptione1){
- //e1.printStackTrace();
- //}
- Log.e(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"readwriteerror111111");
- }
- }
- out.close();
- in.close();
- }catch(Exceptione){
- Log.e(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"readwriteerror222222");
- e.printStackTrace();
- }finally{
- try{
- if(client!=null){
- Log.v(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"client.close()");
- client.close();
- }
- }catch(IOExceptione){
- Log.e(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"readwriteerror333333");
- e.printStackTrace();
- }
- }
6.如果是在PC端和android端的读写操作来while(true){}循环,这样socket流的结尾不好判断,不能用“-1”来判断,因为“-1”是只有在socket关闭时才作为判断结尾。
7.socket在out.write(bytes);时,要是数据太大时,超过socket的缓存,socket自动分包发送,所以对方就一定要用循环来多次读。最好的办法就是服务器和客户端协议好,比如发文件时,先写过来一个要发送的文件的大小,然后再发送文件;对方用这个大小,来循环读取数据。
android端接收数据的代码:
[java] view plain copy- /**
- *功能:从socket流中读取完整文件数据
- *
- *InputStreamin:socket输入流
- *
- *byte[]filelength:流的前4个字节存储要转送的文件的字节数
- *
- *byte[]fileformat:流的前5-8字节存储要转送的文件的格式(如.apk)
- *
- **/
- publicstaticbyte[]receiveFileFromSocket(InputStreamin,
- OutputStreamout,byte[]filelength,byte[]fileformat){
- byte[]filebytes=null;//文件数据
- try{
- intfilelen=MyUtil.bytesToInt(filelength);//文件长度从4字节byte[]转成Int
- Stringstrtmp="readfilelengthok:"+filelen;
- out.write(strtmp.getBytes("utf-8"));
- out.flush();
- filebytes=newbyte[filelen];
- intpos=0;
- intrcvLen=0;
- while((rcvLen=in.read(filebytes,pos,filelen-pos))>0){
- pos+=rcvLen;
- }
- Log.v(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"readfileOK:filesize="+filebytes.length);
- out.write("readfileok".getBytes("utf-8"));
- out.flush();
- }catch(Exceptione){
- Log.v(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"receiveFileFromSocketerror");
- e.printStackTrace();
- }
- returnfilebytes;
- }
8.socket的最重要的机制就是读写采用的是阻塞的方式,如果客户端作为命令发起者,服务器端作为接收者的话,只有当客户端client用out.writer()写到输出流里后,即流中有数据service的read才会执行,不然就会一直停在read()那里等数据。
9.还要让服务器端可以同时连接多个client,即服务器端用new thread()来作数据读取操作。
源码:
客户端(pc端):
testPcClient.java
[java] view plain copy- importjava.io.BufferedInputStream;
- importjava.io.BufferedOutputStream;
- importjava.io.BufferedReader;
- importjava.io.ByteArrayOutputStream;
- importjava.io.IOException;
- importjava.io.InputStream;
- importjava.io.InputStreamReader;
- importjava.net.InetAddress;
- importjava.net.Socket;
- importjava.net.UnknownHostException;
- publicclasstestPcClient{
- /**
- *@paramargs
- *@throwsInterruptedException
- */
- publicstaticvoidmain(String[]args)throwsInterruptedException{
- try{
- Runtime.getRuntime().exec(
- "adbshellambroadcast-aNotifyServiceStop");
- Thread.sleep(3000);
- Runtime.getRuntime().exec("adbforwardtcp:12580tcp:10086");
- Thread.sleep(3000);
- Runtime.getRuntime().exec(
- "adbshellambroadcast-aNotifyServiceStart");
- Thread.sleep(3000);
- }catch(IOExceptione3){
- e3.printStackTrace();
- }
- Socketsocket=null;
- try{
- InetAddressserverAddr=null;
- serverAddr=InetAddress.getByName("127.0.0.1");
- System.out.println("TCP1111"+"C:Connecting...");
- socket=newSocket(serverAddr,12580);
- Stringstr="hi,wufenglong";
- System.out.println("TCP221122"+"C:RECEIVE");
- BufferedOutputStreamout=newBufferedOutputStream(socket
- .getOutputStream());
- BufferedInputStreamin=newBufferedInputStream(socket
- .getInputStream());
- BufferedReaderbr=newBufferedReader(newInputStreamReader(
- System.in));
- booleanflag=true;
- while(flag){
- System.out.print("请输入1~6的数字,退出输入exit:");
- StringstrWord=br.readLine();//从控制台输入1~6
- if(strWord.equals("1")){
- out.write("1".getBytes());
- out.flush();
- System.out.println("1finishsendingthedata");
- StringstrFormsocket=readFromSocket(in);
- System.out.println("thedatasentbyserveris:/r/n"
- +strFormsocket);
- System.out
- .println("=============================================");
- }elseif(strWord.equals("2")){
- out.write("2".getBytes());
- out.flush();
- System.out.println("2finishsendingthedata");
- StringstrFormsocket=readFromSocket(in);
- System.out.println("thedatasentbyserveris:/r/n"
- +strFormsocket);
- System.out
- .println("=============================================");
- }elseif(strWord.equals("3")){
- out.write("3".getBytes());
- out.flush();
- System.out.println("3finishsendingthedata");
- StringstrFormsocket=readFromSocket(in);
- System.out.println("thedatasentbyserveris:/r/n"
- +strFormsocket);
- System.out
- .println("=============================================");
- }elseif(strWord.equals("4")){
- /*发送命令*/
- out.write("4".getBytes());
- out.flush();
- System.out.println("sendfilefinishsendingtheCMD:");
- /*服务器反馈:准备接收*/
- StringstrFormsocket=readFromSocket(in);
- System.out
- .println("servicereadyreceicedata:UPDATE_CONTACTS:"
- +strFormsocket);
- byte[]filebytes=FileHelper.readFile("R0013340.JPG");
- System.out.println("filesize="+filebytes.length);
- /*将整数转成4字节byte数组*/
- byte[]filelength=newbyte[4];
- filelength=tools.intToByte(filebytes.length);
- /*将.apk字符串转成4字节byte数组*/
- byte[]fileformat=null;
- fileformat=".apk".getBytes();
- System.out
- .println("fileformatlength="+fileformat.length);
- /*字节流中前4字节为文件长度,4字节文件格式,以后是文件流*/
- /*注意如果write里的byte[]超过socket的缓存,系统自动分包写过去,所以对方要循环写完*/
- out.write(filelength);
- out.flush();
- Stringstrok1=readFromSocket(in);
- System.out.println("servicereceivefilelength:"+strok1);
- //out.write(fileformat);
- //out.flush();
- //Stringstrok2=readFromSocket(in);
- //System.out.println("servicereceivefileformat:"+
- //strok2);
- System.out.println("writedatatoandroid");
- out.write(filebytes);
- out.flush();
- System.out.println("*********");
- /*服务器反馈:接收成功*/
- Stringstrread=readFromSocket(in);
- System.out.println("senddatasuccess:"+strread);
- System.out
- .println("=============================================");
- }elseif(strWord.equalsIgnoreCase("EXIT")){
- out.write("EXIT".getBytes());
- out.flush();
- System.out.println("EXITfinishsendingthedata");
- StringstrFormsocket=readFromSocket(in);
- System.out.println("thedatasentbyserveris:/r/n"
- +strFormsocket);
- flag=false;
- System.out
- .println("=============================================");
- }
- }
- }catch(UnknownHostExceptione1){
- System.out.println("TCP331133"+"ERROR:"+e1.toString());
- }catch(Exceptione2){
- System.out.println("TCP441144"+"ERROR:"+e2.toString());
- }finally{
- try{
- if(socket!=null){
- socket.close();
- System.out.println("socket.close()");
- }
- }catch(IOExceptione){
- System.out.println("TCP5555"+"ERROR:"+e.toString());
- }
- }
- }
- /*从InputStream流中读数据*/
- publicstaticStringreadFromSocket(InputStreamin){
- intMAX_BUFFER_BYTES=4000;
- Stringmsg="";
- byte[]tempbuffer=newbyte[MAX_BUFFER_BYTES];
- try{
- intnumReadedBytes=in.read(tempbuffer,0,tempbuffer.length);
- msg=newString(tempbuffer,0,numReadedBytes,"utf-8");
- tempbuffer=null;
- }catch(Exceptione){
- e.printStackTrace();
- }
- //Log.v(Service139.TAG,"msg="+msg);
- returnmsg;
- }
- }
android服务器端:
主类androidService.java
[java] view plain copy- packagecom.otheri.service;
- importjava.io.File;
- importjava.io.IOException;
- importjava.net.ServerSocket;
- importjava.net.Socket;
- importandroid.app.Service;
- importandroid.content.BroadcastReceiver;
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.content.IntentFilter;
- importandroid.os.IBinder;
- importandroid.util.Log;
- /**
- *设置:android手机
- *
- *
- **/
- publicclassandroidServiceextendsService{
- publicstaticfinalStringTAG="TAG";
- publicstaticBooleanmainThreadFlag=true;
- publicstaticBooleanioThreadFlag=true;
- ServerSocketserverSocket=null;
- finalintSERVER_PORT=10086;
- FiletestFile;
- privatesysBroadcastReceiversysBR;
- @Override
- publicvoidonCreate(){
- super.onCreate();
- Log.v(TAG,Thread.currentThread().getName()+"---->"+"onCreate");
- /*创建内部类sysBroadcastReceiver并注册registerReceiver*/
- sysRegisterReceiver();
- newThread(){
- publicvoidrun(){
- doListen();
- };
- }.start();
- }
- privatevoiddoListen(){
- Log.d(TAG,Thread.currentThread().getName()+"---->"
- +"doListen()START");
- serverSocket=null;
- try{
- Log.d(TAG,Thread.currentThread().getName()+"---->"
- +"doListen()newserverSocket");
- serverSocket=newServerSocket(SERVER_PORT);
- booleanmainThreadFlag=true;
- while(mainThreadFlag){
- Log.d(TAG,Thread.currentThread().getName()+"---->"
- +"doListen()listen");
- Socketclient=serverSocket.accept();
- newThread(newThreadReadWriterIOSocket(this,client)).start();
- }
- }catch(IOExceptione1){
- Log.v(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"newserverSocketerror");
- e1.printStackTrace();
- }
- }
- /*创建内部类sysBroadcastReceiver并注册registerReceiver*/
- privatevoidsysRegisterReceiver(){
- Log.v(TAG,Thread.currentThread().getName()+"---->"
- +"sysRegisterReceiver");
- sysBR=newsysBroadcastReceiver();
- /*注册BroadcastReceiver*/
- IntentFilterfilter1=newIntentFilter();
- /*新的应用程序被安装到了设备上的广播*/
- filter1.addAction("android.intent.action.PACKAGE_ADDED");
- filter1.addDataScheme("package");
- filter1.addAction("android.intent.action.PACKAGE_REMOVED");
- filter1.addDataScheme("package");
- registerReceiver(sysBR,filter1);
- }
- /*内部类:BroadcastReceiver用于接收系统事件*/
- privateclasssysBroadcastReceiverextendsBroadcastReceiver{
- @Override
- publicvoidonReceive(Contextcontext,Intentintent){
- Stringaction=intent.getAction();
- if(action.equalsIgnoreCase("android.intent.action.PACKAGE_ADDED")){
- //ReadInstalledAPP();
- }elseif(action
- .equalsIgnoreCase("android.intent.action.PACKAGE_REMOVED")){
- //ReadInstalledAPP();
- }
- Log.v(TAG,Thread.currentThread().getName()+"---->"
- +"sysBroadcastReceiveronReceive");
- }
- }
- @Override
- publicvoidonDestroy(){
- super.onDestroy();
- //关闭线程
- mainThreadFlag=false;
- ioThreadFlag=false;
- //关闭服务器
- try{
- Log.v(TAG,Thread.currentThread().getName()+"---->"
- +"serverSocket.close()");
- serverSocket.close();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- Log.v(TAG,Thread.currentThread().getName()+"---->"
- +"****************onDestroy****************");
- }
- @Override
- publicvoidonStart(Intentintent,intstartId){
- Log.d(TAG,Thread.currentThread().getName()+"---->"+"onStart()");
- super.onStart(intent,startId);
- }
- @Override
- publicIBinderonBind(Intentarg0){
- Log.d(TAG,"onBind");
- returnnull;
- }
- }
用于接收PC发来的Broastcast并启动主类service的ServiceBroadcastReceiver.java
[java] view plain copy- packagecom.otheri.service;
- importandroid.content.BroadcastReceiver;
- importandroid.content.Context;
- importandroid.content.Intent;
- importandroid.util.Log;
- publicclassServiceBroadcastReceiverextendsBroadcastReceiver{
- privatestaticStringSTART_ACTION="NotifyServiceStart";
- privatestaticStringSTOP_ACTION="NotifyServiceStop";
- @Override
- publicvoidonReceive(Contextcontext,Intentintent){
- Log.d(androidService.TAG,Thread.currentThread().getName()+"---->"
- +"ServiceBroadcastReceiveronReceive");
- Stringaction=intent.getAction();
- if(START_ACTION.equalsIgnoreCase(action)){
- context.startService(newIntent(context,androidService.class));
- Log.d(androidService.TAG,Thread.currentThread().getName()+"---->"
- +"ServiceBroadcastReceiveronReceivestartend");
- }elseif(STOP_ACTION.equalsIgnoreCase(action)){
- context.stopService(newIntent(context,androidService.class));
- Log.d(androidService.TAG,Thread.currentThread().getName()+"---->"
- +"ServiceBroadcastReceiveronReceivestopend");
- }
- }
- }
用于新socket连接的读写线程类ThreadReadWriterIOSocket.java
[java] view plain copy- packagecom.otheri.service;
- importjava.io.BufferedInputStream;
- importjava.io.BufferedOutputStream;
- importjava.io.ByteArrayOutputStream;
- importjava.io.File;
- importjava.io.IOException;
- importjava.io.InputStream;
- importjava.io.OutputStream;
- importjava.net.Socket;
- importandroid.content.Context;
- importandroid.util.Log;
- importcom.otheri.util.FileHelper;
- importcom.otheri.util.MyUtil;
- /**
- *功能:用于socket的交互
- *
- *@authorwufenglong
- *
- */
- publicclassThreadReadWriterIOSocketimplementsRunnable{
- privateSocketclient;
- privateContextcontext;
- ThreadReadWriterIOSocket(Contextcontext,Socketclient){
- this.client=client;
- this.context=context;
- }
- @Override
- publicvoidrun(){
- Log.d(androidService.TAG,Thread.currentThread().getName()+"---->"
- +"aclienthasconnectedtoserver!");
- BufferedOutputStreamout;
- BufferedInputStreamin;
- try{
- /*PC端发来的数据msg*/
- StringcurrCMD="";
- out=newBufferedOutputStream(client.getOutputStream());
- in=newBufferedInputStream(client.getInputStream());
- //testSocket();//测试socket方法
- androidService.ioThreadFlag=true;
- while(androidService.ioThreadFlag){
- try{
- if(!client.isConnected()){
- break;
- }
- /*接收PC发来的数据*/
- Log.v(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"willread......");
- /*读操作命令*/
- currCMD=readCMDFromSocket(in);
- Log.v(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"**currCMD===="+currCMD);
- /*根据命令分别处理数据*/
- if(currCMD.equals("1")){
- out.write("OK".getBytes());
- out.flush();
- }elseif(currCMD.equals("2")){
- out.write("OK".getBytes());
- out.flush();
- }elseif(currCMD.equals("3")){
- out.write("OK".getBytes());
- out.flush();
- }elseif(currCMD.equals("4")){
- /*准备接收文件数据*/
- try{
- out.write("servicereceiveOK".getBytes());
- out.flush();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- /*接收文件数据,4字节文件长度,4字节文件格式,其后是文件数据*/
- byte[]filelength=newbyte[4];
- byte[]fileformat=newbyte[4];
- byte[]filebytes=null;
- /*从socket流中读取完整文件数据*/
- filebytes=receiveFileFromSocket(in,out,filelength,
- fileformat);
- //Log.v(Service139.TAG,"receivedata="+new
- //String(filebytes));
- try{
- /*生成文件*/
- Filefile=FileHelper.newFile("R0013340.JPG");
- FileHelper.writeFile(file,filebytes,0,
- filebytes.length);
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }elseif(currCMD.equals("exit")){
- }
- }catch(Exceptione){
- //try{
- //out.write("error".getBytes("utf-8"));
- //out.flush();
- //}catch(IOExceptione1){
- //e1.printStackTrace();
- //}
- Log.e(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"readwriteerror111111");
- }
- }
- out.close();
- in.close();
- }catch(Exceptione){
- Log.e(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"readwriteerror222222");
- e.printStackTrace();
- }finally{
- try{
- if(client!=null){
- Log.v(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"client.close()");
- client.close();
- }
- }catch(IOExceptione){
- Log.e(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"readwriteerror333333");
- e.printStackTrace();
- }
- }
- }
- /**
- *功能:从socket流中读取完整文件数据
- *
- *InputStreamin:socket输入流
- *
- *byte[]filelength:流的前4个字节存储要转送的文件的字节数
- *
- *byte[]fileformat:流的前5-8字节存储要转送的文件的格式(如.apk)
- *
- **/
- publicstaticbyte[]receiveFileFromSocket(InputStreamin,
- OutputStreamout,byte[]filelength,byte[]fileformat){
- byte[]filebytes=null;//文件数据
- try{
- in.read(filelength);//读文件长度
- intfilelen=MyUtil.bytesToInt(filelength);//文件长度从4字节byte[]转成Int
- Stringstrtmp="readfilelengthok:"+filelen;
- out.write(strtmp.getBytes("utf-8"));
- out.flush();
- filebytes=newbyte[filelen];
- intpos=0;
- intrcvLen=0;
- while((rcvLen=in.read(filebytes,pos,filelen-pos))>0){
- pos+=rcvLen;
- }
- Log.v(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"readfileOK:filesize="+filebytes.length);
- out.write("readfileok".getBytes("utf-8"));
- out.flush();
- }catch(Exceptione){
- Log.v(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"receiveFileFromSocketerror");
- e.printStackTrace();
- }
- returnfilebytes;
- }
- /*读取命令*/
- publicstaticStringreadCMDFromSocket(InputStreamin){
- intMAX_BUFFER_BYTES=2048;
- Stringmsg="";
- byte[]tempbuffer=newbyte[MAX_BUFFER_BYTES];
- try{
- intnumReadedBytes=in.read(tempbuffer,0,tempbuffer.length);
- msg=newString(tempbuffer,0,numReadedBytes,"utf-8");
- tempbuffer=null;
- }catch(Exceptione){
- Log.v(androidService.TAG,Thread.currentThread().getName()
- +"---->"+"readFromSocketerror");
- e.printStackTrace();
- }
- //Log.v(Service139.TAG,"msg="+msg);
- returnmsg;
- }
- }
后面是两个辅助类:
[java] view plain copy- packagecom.otheri.util;
- importjava.io.BufferedInputStream;
- importjava.io.File;
- importjava.io.FileInputStream;
- importjava.io.FileOutputStream;
- importjava.io.IOException;
- importcom.otheri.service.androidService;
- importandroid.util.Log;
- publicclassFileHelper{
- //privatestaticStringFILEPATH="/data/local/tmp";
- privatestaticStringFILEPATH="/sdcard";
- //privatestaticStringFILEPATH="/tmp";
- publicstaticFilenewFile(StringfileName){
- Filefile=null;
- try{
- file=newFile(FILEPATH,fileName);
- file.delete();
- file.createNewFile();
- }catch(IOExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- returnfile;
- }
- publicstaticvoidwriteFile(Filefile,byte[]data,intoffset,intcount)
- throwsIOException{
- FileOutputStreamfos=newFileOutputStream(file,true);
- fos.write(data,offset,count);
- fos.flush();
- fos.close();
- }
- publicstaticbyte[]readFile(StringfileName)throwsIOException{
- Filefile=newFile(FILEPATH,fileName);
- file.createNewFile();
- FileInputStreamfis=newFileInputStream(file);
- BufferedInputStreambis=newBufferedInputStream(fis);
- intleng=bis.available();
- Log.v(androidService.TAG,"filesize="+leng);
- byte[]b=newbyte[leng];
- bis.read(b,0,leng);
- //Inputin=newInput(fis);
- //byte[]ret=in.readAll();
- //in.close();
- bis.close();
- returnb;
- }
- }
- packagecom.otheri.util;
- importjava.io.InputStream;
- importandroid.util.Log;
- importcom.otheri.service.androidService;
- publicclassMyUtil{
- /*byte[]转Int*/
- publicstaticintbytesToInt(byte[]bytes){
- intaddr=bytes[0]&0xFF;
- addr|=((bytes[1]<<8)&0xFF00);
- addr|=((bytes[2]<<16)&0xFF0000);
- addr|=((bytes[3]<<24)&0xFF000000);
- returnaddr;
- }
- /*Int转byte[]*/
- publicstaticbyte[]intToByte(inti){
- byte[]abyte0=newbyte[4];
- abyte0[0]=(byte)(0xff&i);
- abyte0[1]=(byte)((0xff00&i)>>8);
- abyte0[2]=(byte)((0xff0000&i)>>16);
- abyte0[3]=(byte)((0xff000000&i)>>24);
- returnabyte0;
- }
- }
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
- Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- Android(安卓)自定义 View 之使用 SurfaceView 实现动画
- Android(安卓)NDK下编译google protocol buffer(protobuf)