当前位置:  编程技术>移动开发
本页文章导读:
    ▪解决NSData中非法utf-8字节的有关问题        解决NSData中非法utf-8字节的问题      当用nsdata,按照utf8编码来初始化nsstring时,如果nsdata出现了非法utf-8编码,nsstring就回返回空,这不是我所期望的,对于非法的字节,可以用A代替。 .........
    ▪ jdk 跟 jre 的区别        jdk 和 jre 的区别 1 jre java runtime environment java程序运行环境 包含jvm和核心类 虚拟机是(bin/client中的jvm.dll)jdk java development kit java程序开发包 他提供一系列的编译和运行工具 javac java 等命令/jre.........
    ▪ Singleton 单例模式(懒汉模式和饿汉方式)       Singleton 单例模式(懒汉方式和饿汉方式) 单例模式的概念:单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个.........

[1]解决NSData中非法utf-8字节的有关问题
    来源: 互联网  发布时间: 2014-02-18
解决NSData中非法utf-8字节的问题
     当用nsdata,按照utf8编码来初始化nsstring时,如果nsdata出现了非法utf-8编码,nsstring就回返回空,这不是我所期望的,对于非法的字节,可以用A代替。
    按照utf8格式标准,
U+00000000 - U+0000007F: 0 xxxxxxx 0x - 7x
U+00000080 - U+000007FF: 110 xxxxx 10 xxxxxx Cx 8x - Dx Bx
U+00000800 - U+0000FFFF: 1110 xxxx 10 xxxxxx 10 xxxxxx Ex 8x 8x - Ex Bx Bx
U+00010000 - U+001FFFFF: 11110 xxx 10 xxxxxx 10 xxxxxx 10 xxxxxx F0 8x 8x 8x - F7 Bx Bx Bx 很少用
U+00200000 - U+03FFFFFF: 111110 xx 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx F8 8x 8x 8x 8x - FB Bx Bx Bx Bx
U+04000000 - U+7FFFFFFF: 1111110 x 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx FC 8x 8x 8x 8x 8x - FD Bx Bx Bx Bx Bx
如果一个字节小于0x80,那么他就是一个字符,如果大于C0小于E0,表示有2个字节是utf8,第一个是110开头的,第二个是10开头的,如果大于E0小于F0,表示3个字节是utf8,第一个是1110开头的,第二个是10开头的,第三个是10开头的,如果不是表明非法,将非法的字节设置为A,即可。
    如何判断一个字节是否是110开头的或者是1110开头的呢?用b & 0xE0 == 0xC0,类推,判断是否是1110开头的,b&0xF0 == 0xE0。
  经过这一的转化,nsstring就能初始化了。
   代码如下:

                //将nsdata中的非法字符替换为A 0x41
		char aa[] = {'A','A','A','A','A','A'};
		NSMutableData *md = [NSMutableData dataWithData:data];
		int loc = 0;
		while(loc < [md length]){
			char buffer;
			[md getBytes:&buffer range:NSMakeRange(loc, 1)];
			//printf("%d", buffer&0x80);
			if((buffer & 0x80) == 0){
				loc++;
				continue;
			}else if((buffer & 0xE0) == 0xC0){
				loc++;
				[md getBytes:&buffer range:NSMakeRange(loc, 1)];
				if((buffer & 0xC0) == 0x80){
					loc++;
					continue;
				}
				loc--;
				//非法字符,将这1个字符替换为AA
				[md replaceBytesInRange:NSMakeRange(loc  , 1) withBytes:aa length:1];
				loc++;
				continue;
				
			}else if((buffer & 0xF0) == 0xE0){
				loc++;
				[md getBytes:&buffer range:NSMakeRange(loc, 1)];
				if((buffer & 0xC0) == 0x80){
					loc++;
					[md getBytes:&buffer range:NSMakeRange(loc, 1)];
					if((buffer & 0xC0) == 0x80){
						loc++;
						continue;
					}
					loc--;
				}
				loc--;
				//非法字符,将这个字符替换为A
				[md replaceBytesInRange:NSMakeRange(loc , 1) withBytes:aa length:1];
				loc++;
				continue;
				
			}else{
				[md replaceBytesInRange:NSMakeRange(loc, 1) withBytes:aa length:1];
				loc++;
				continue;
			}
		}
		//NSLog(@" new data =>%@", md);
		str = [[[NSString alloc] initWithData:md encoding:NSUTF8StringEncoding] autorelease];

    
[2] jdk 跟 jre 的区别
    来源: 互联网  发布时间: 2014-02-18
jdk 和 jre 的区别
1 jre java runtime environment java程序运行环境 包含jvm和核心类 虚拟机是(bin/client中的jvm.dll)


jdk java development kit java程序开发包 他提供一系列的编译和运行工具 javac java 等命令
/jre/bin/server /jre/bin/client 各自有一个 jvm.dll所以它包含两个虚拟机



2  配置环境变量:JAVA_HOME C:\Program Files (x86)\Java\jdk1.6.0_04   jdk的路径
Path %JAVA_HOME%\bin;

javac Test.java
java Test



3 下面这个可以配置也可以不配置

classpath 是指定java程序运行或编译类时候的搜索类的路径  先搜索核心类 再搜索classpath
.;c:\jar\log4j.jar;d:\work\java
指定了3个搜索类路径  . 是当前路径(这个很重要)


    
[3] Singleton 单例模式(懒汉模式和饿汉方式)
    来源: 互联网  发布时间: 2014-02-18
Singleton 单例模式(懒汉方式和饿汉方式)
单例模式的概念:

单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。


关键点:

1)一个类只有一个实例       这是最基本的

2)它必须自行创建这个实例

3)它必须自行向整个系统提供这个实例

----------------------------------------------------------------------------


两种实现方式:


1  懒汉模式(类加载时不初始化)


复制代码

package Singleton;

public class LazySingleton {
    //懒汉式单例模式
    //比较懒,在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢
   
   
    private static LazySingleton intance = null;//静态私用成员,没有初始化
   
    private LazySingleton()
    {
        //私有构造函数
    }
   
    public static synchronized LazySingleton getInstance()    //静态,同步,公开访问点
    {
        if(intance == null)
        {
            intance = new LazySingleton();
        }
        return intance;
    }
}

复制代码


关键点:(代码注释上已给出)

1)构造函数定义为私有----不能在别的类中来获取该类的对象,只能在类自身中得到自己的对象

2)成员变量为static的,没有初始化----类加载快,但访问类的唯一实例慢,static保证在自身类中获取自身对象

3)公开访问点getInstance: public和synchronized的-----public保证对外公开,同步保证多线程时的正确性(因为类变量不是在加载时初始化的)

优缺点见代码注释。




2  饿汉式单例模式(在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快)


复制代码

package Singleton;

public class EagerSingleton {
    //饿汉单例模式
    //在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
   
    private static EagerSingleton instance = new EagerSingleton();//静态私有成员,已初始化
   
    private EagerSingleton()
    {
        //私有构造函数
    }
   
    public static EagerSingleton getInstance()    //静态,不用同步(类加载时已初始化,不会有多线程的问题)
    {
        return instance;
    }
   
   
}

复制代码


关键点:(代码注释已写)

1)私有构造函数

2)静态私有成员--在类加载时已初始化

3)公开访问点getInstance-----不需要同步,因为在类加载时已经初始化完毕,也不需要判断null,直接返回

优缺点见代码注释。

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪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播放网络音频的实现方法...
移动开发 iis7站长之家
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


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

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

浙ICP备11055608号-3