当前位置:  编程技术>移动开发
本页文章导读:
    ▪文件管理器-获得文件系统的可用大小,取得文件或文件夹的大小        文件管理器--取得文件系统的可用大小,取得文件或文件夹的大小StatFs类: /**  * Retrieve overall information about the space on a filesystem.  This    *  is a  * Wrapper for Unix statfs().  */ 检索整.........
    ▪ 聚合与容器的区别        集合与容器的区别                                                                        集合与容器的区别          .集合类是放在java.util.*;这个包.........
    ▪ 跨平台腾挪开发实战(七)-服务器端快速搭建       跨平台移动开发实战(七)------服务器端快速搭建客户端与服务端基于HTTP和WebSocket网络协议来通讯,其中HTTP用于从客户端向服务端的请求,WebSocket用于从服务端向客户端的推送,因此服务器.........

[1]文件管理器-获得文件系统的可用大小,取得文件或文件夹的大小
    来源: 互联网  发布时间: 2014-02-18
文件管理器--取得文件系统的可用大小,取得文件或文件夹的大小

StatFs类:

/**

 * Retrieve overall information about the space on a filesystem.  This    *  is a

 * Wrapper for Unix statfs().

 */

检索整个文件系统的空间信息,是对Unix中statfs()函数的封装, 开发中可用这个类取得文件系统的可用大小等。


//递归取得文件或文件夹的大小
	public static long fileLength(File file) {
		long length = 0;
		if(file == null || !file.exists()){
			return 0;
		}
		
		if(file.isFile()){
			length = file.length();
		}else if(file.isDirectory()){
			File[] files = file.listFiles();
			for(int i = 0; files != null && i < files.length; i++){
				length = length + fileLength(files[i]); 
			}
		}
		return length;
	}

//取得文件系统的可用空间
public static long availableSize(File mCurrentDirectory) {
        StatFs stat = new StatFs(mCurrentDirectory.getPath());

        long blockSize = stat.getBlockSize();
        long availableBlocks = stat.getAvailableBlocks();
		long availableSize = blockSize * availableBlocks;
		
		return availableSize;
	}



    
[2] 聚合与容器的区别
    来源: 互联网  发布时间: 2014-02-18
集合与容器的区别
                                                                        集合与容器的区别
 
       .集合类是放在java.util.*;这个包里。集合类存放的都是对象的引用,而非对象本身,为了说起来方便些,我们称集合中的对象就是指集合中对象的引用(reference)。引用的概念大家不会忘了吧,在前边我们讲数据类型时讲的。   
         集合类型主要有3种:set(集)、list(列表)、map(映射)和Queue(队列)。//队列为jdk5中的加上的    
         (1)    Set集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。我们知道数学上的集合也是Set这个,集合里面一定是没有重复的元素的。
       (2)List列表(List)的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的Set是不同的。它是链表嘛,一条链肯定有顺序这个顺序就不一定了。     
       (3)Map         映射(Map),这个在java里不是地图的意思,其实地图也是映射哈。它里面的东西是键-值对(key-value)出现的,键值对是什么呢?举个例子,比如我们查字典,用部首查字法。目录那个字就是键,这个字的解释就是值。键和值成对出现。这样说可以理解吧。这也是很常用的数据结构哦。      
       (4)Queue          在jdk5.0以前,通常的实现方式是使用java.util.List集合来模仿Queue。Queue的概念通过把对象添加(称为enqueuing的操作)到List的尾部(即Queue的后部)并通过从List的头部(即Queue的前部)提取对象而从 List中移除(称为dequeuing的操作)来模拟。你需要执行先进先出的动作时可以直接使用Queue接口就可以了。          
           这4个东西,有时候功能还不太完善,需要有些子类继承它的特性。Set的子接口有TreeSet,SortedSet,List的有ArrayList等,Map里有HashMap,HashTable等,Queue里面有BlockingQueue等。
          容器可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。容器是一个Java 所编写的程序,原先必须自行编写程序以管理对象关系,现在容器都会自动帮您作好。Java容器类包含List、ArrayList、Vector及map、HashTable、HashMap
  ArrayList和HashMap是异步的,Vector和HashTable是同步的,所以Vector和HashTable是线程安全的,而 ArrayList和HashMap并不是线程安全的。因为同步需要花费机器时间,所以Vector和HashTable的执行效率要低于 ArrayList和HashMap。
     容器:能装对象的东西。数组知道吧?int型的数组就可以装int型的数据。 而容器呢,可以装对象,以及所有的数据嘛~。容器的使用一般不是通过接口来使用的,而是通过其实现类来使用。容器接口大致归纳为:list,set还有map。具体的实现类为:ArrayList,LinkedList,TreeSet,HashSet,HashMap,TreeMap等

    
[3] 跨平台腾挪开发实战(七)-服务器端快速搭建
    来源: 互联网  发布时间: 2014-02-18
跨平台移动开发实战(七)------服务器端快速搭建

客户端与服务端基于HTTP和WebSocket网络协议来通讯,其中HTTP用于从客户端向服务端的请求,WebSocket用于从服务端向客户端的推送,因此服务器端需要支持HTTP和WebSocket两种协议。HTTP好说,所有Web服务器都支持,而支持WebSocket的倒不多。

  • Java阵营:Tomcat 7和Netty
  • .Net阵营:System.Net.WebSockets
  • Nodejs阵营:Socket.io

.Net和Nodejs俺不熟,就不作评论,Tomcat 7在最新版本里加入对Websocket支持,但我需要更为轻量级的方案,最好是内嵌,因此Netty就成了我首选。Netty源码里有websocket的Samples,我就是直接在samples上进行修改,总结下来需要如下几步:

  • 打开网络端口
    (new Thread(new Runnable(){
    	@Override
    	public void run() {
    		ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(
                    Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));
            // Set up the event pipeline factory.
            bootstrap.setPipelineFactory(new WebSocketServerPipelineFactory());
            int port = 8080;
            // Bind and start to accept incoming connections.
            bootstrap.bind(new InetSocketAddress(port));
            System.out.println("Web socket server started at port " + port + '.');
    	}
    })).start();
  • 创建处理数据流的pipeline,特别是加入Websocket的handler
    public class WebSocketServerPipelineFactory implements ChannelPipelineFactory {
        public ChannelPipeline getPipeline() throws Exception {
            // Create a default pipeline implementation.
            ChannelPipeline pipeline = pipeline();
            pipeline.addLast("decoder", new HttpRequestDecoder());
            pipeline.addLast("aggregator", new HttpChunkAggregator(65536));
            pipeline.addLast("encoder", new HttpResponseEncoder());
            pipeline.addLast("handler", new WebSocketServerHandler());
            return pipeline;
        }
    }
  • 实现在WebSocketServerHandler里实现messageReceived,接收网络数据。这里数据分为HTTP和WebSocket两种,如何是HTTP,那说明是处理最开始的Handshake阶段,这是需要为WebSocket建立握手
    // Handshake
    WebSocketServerHandshakerFactory wsFactory = new WebSocketServerHandshakerFactory(
            this.getWebSocketLocation(req), null, false);
    this.handshaker = wsFactory.newHandshaker(req);
    if (this.handshaker == null) {
        wsFactory.sendUnsupportedWebSocketVersionResponse(ctx.getChannel());
    } else {
        this.handshaker.handshake(ctx.getChannel(), req).addListener(WebSocketServerHandshaker.HANDSHAKE_LISTENER);
    }
    如果是WebSocketFrame,则接收客户端发来的message
    String request = ((TextWebSocketFrame) frame).getText();
  • 向客户端推送数据,这里只要是channel没关,并且能拿到channel对象即可
    ctx.getChannel().write(new TextWebSocketFrame("some message"));
  • 实现channelOpen、channelClosed等方法,实现对网络连接整个生命周期的监控
  • 值得注意的是目前WebSocket的实现对二进制流支持不够好,因此当需要服务端向客户端推送类似与文件类IO流时,我采取的折中方案,就是先让websocket向客户端发通知,然后再让客户端向服务端请求文件下载,当然这样的代价就是两次连接,如果有更好的方案请推荐给我。

    对于HTTP,Netty从原理上说是支持的,不过支持得不够好,最新的不稳定版本才有HTTP Request的解析支持,我也没太多时间来写这块,于是乎又找了另外一个可以内嵌的Web服务器Jetty来支持HTTP和servlet,当然我用了比较老版本的Jetty 6,这个版本比较轻量,内嵌比较简单,几行代码就可以打开网络端口并支持servlet:

    (new Thread(new Runnable(){
    	@Override
    	public void run() {
    		int port = 8081;
    		Server server = new Server(port);
    		Context root = new Context(server,"/",Context.SESSIONS);
    		root.addServlet(new ServletHolder(new LoginSTServlet()), "/login");
    		try{
    			server.start();
    	        System.out.println("Http server started at port " + port + '.');
    		}catch(Exception err){
    			err.printStackTrace();
    		}
    	}
    })).start();
    这样,几个类就搭起了服务端,当然这只是快速开始,服务端的建设远不止这些,比如security和数据压缩等,这些我单独拿出来详细分析



        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android按钮单击事件的四种常用写法总结 iis7站长之家
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3