- 浏览: 160240 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zbg1983:
<div class="quote_title ...
EXTJS4 郁闷的Loading -
caelyntang:
在二级联动加载的时候提前加载一次二级联动,不是根据一级联动的值 ...
EXTJS4 郁闷的Loading -
55558888:
将 queryMode: 'local', 改为 query ...
EXTJS4 郁闷的Loading -
jumboluo:
这是一个Ext的一个bug:http://www.sencha ...
EXTJS4 郁闷的Loading -
jumboluo:
也遇到同样的问题,也不知道怎么解决啊。
EXTJS4 郁闷的Loading
本文主要是模拟配置文件中的资源串文件,将最终处理结果存放于Map中。
第一步:读取文件数据进入字节数组。
/** * 通过文件路径读取文件内容,返回字节数组。 * * @param name * @return */ final static public byte[] readfile(String name) { FileInputStream in = null; byte buffer[] = null; try { in = new FileInputStream(new File(name)); buffer = new byte[in.available()]; in.read(buffer); } catch (Exception e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } return buffer; }
第二步:过滤文件中的多余空格、换行以及注释。支持/*……*/样式的注释。
/** * 过滤文件中的注释以及多余的空格。<br> * 此种注释只支持/*格式的。<br> * 处理过滤换行以及换行中的空格。 * * @param b * @return */ final static public byte[] filter(byte[] b) { byte[] bb; int record, temp = b.length; boolean flag = true; for (int i = 0; i < b.length - 1; i++) { record = 0; if (b[i] != 0x2F || b[i + 1] != 0x2A) { if (b[i] == 0x0D && b[i + 1] == 0x0A) { flag = true; for (int j = 0; flag && j < b.length - 2; j++) { if (i + j + 2 < b.length - 1 && b[i + j + 2] == 0X20) { record++; } else if (i + j + 3 < b.length - 1 && b[i + j + 2] == 0x0D && b[i + j + 3] == 0x0A) { record = record + 2; j++; } else { flag = false; } } } } else { int index = i; record = 0; while (!(b[index] == 0x2A && b[index + 1] == 0x2F)) { index++; record++; } record = record + 4; } if (record != 0) { int j = b[i] != 0x2F || b[i + 1] != 0x2A ? i + 2 : i; for (; j < b.length - record; j++) { b[j] = b[j + record]; } for (int k = 0, m = b.length - 1; k < record; m--, k++) { if (k == record - 2) { b[m] = 0x0A; b[m - 1] = 0x0D; break; } else { b[m] = 0x00; } } } if (b[i] == 0X00) { temp = i; break; } } bb = new byte[temp]; System.arraycopy(b, 0, bb, 0, temp); return bb; }
第三步:解析过滤后的字节数组,存放于Map中。
/** * 将文件信息内容保存为Map,可以通过键值获取。<br> * 同名键值将被后者覆盖。 * * @param b * @return */ final static public HashMap<String, byte[]> parse(byte[] b) { int req = 0, ren = 0, fen = 0; HashMap<String, byte[]> map = new HashMap<String, byte[]>(); byte[] index = null, value = null; for (int i = 0; i < b.length; i++) { if (b[i] == 0X3D) { req = i; fen = ren; } else if (b[i] == 0X0A) { ren = i; fen = fen == 0 ? -1 : fen; index = new byte[req - fen - 1]; value = new byte[ren - req - 2]; System.arraycopy(b, fen + 1, index, 0, req - fen - 1); System.arraycopy(b, req + 1, value, 0, ren - req - 2); map.put(new String(index), value); } } return map; }
第四步:过程中使用到的工具类。
1、转换中文字符工具。
/** * 转换中文字符。 * * @param b * @return */ final static public String reserve(byte[] b) { try { return new String(b, "gb2312"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; }
2、输出解析出来的字节数组数据,注意处理中文。
/** * 输出解析出来的字节数组。 * * @param b */ final static public void toStringBytes(byte[] b) { byte[] bb = new byte[2]; for (int i = 0; i < b.length; i++) { if (b[i] < 0) { bb[0] = b[i]; bb[1] = b[i + 1]; System.out.print(reserve(bb)); i++; } else { System.out.print((char) b[i]); } } }
3、输出解析出来的Map数据。
/** * 输出解析出来的Map数据。 * * @param map */ final static public void toStringBytes(HashMap<String, byte[]> map) { Set<String> keys = (Set<String>) map.keySet(); for (String string : keys) { System.out.println(string + "=----=" + new String(map.get(string))); } }
第五步:测试代码。
public static void main(String[] args) { byte[] b = readfile("C://resourse.propertity"); toStringBytes(b); System.out.println(); System.out.println("------------MMMMMMMMMMMMM--------------"); toStringBytes(parse((filter(b)))); }
附注:
测试的resourse.propertity文件内容:
/*yuifuidsygsuid fghfdgfghfdjhgdjgf*/ ireader.index.name=索引页面 /*yuifuidsygsuid fghfdgfghfdjhgdjgf*/ ireader.index.title=标题 /*yuifuidsygsuid*/ ireader.index.confirm=确认 ireader.index.cancel=取 消 ireader.index.cancel=取 消34325 ireader.index.ok=好
程序执行的结果:
/*yuifuidsygsuid fghfdgfghfdjhgdjgf*/ ireader.index.name=索引页面 /*yuifuidsygsuid fghfdgfghfdjhgdjgf*/ ireader.index.title=标题 /*yuifuidsygsuid*/ ireader.index.confirm=确认 ireader.index.cancel=取 消 ireader.index.cancel=取 消34325 ireader.index.ok=好 ------------MMMMMMMMMMMMM-------------- ireader.index.cancel=----=取 消34325 ireader.index.ok=----=好 ireader.index.title=----=标题 ireader.index.name=----=索引页面 ireader.index.confirm=----=确认
Ok。基本满意。
附加增强功能:
如下操作支持了注释结束后的换行以及空格的过滤,并且提取公共方法,是程序看起来简洁,易于理解。
修改方法filter.java
final static public byte[] filter(byte[] b) { byte[] bb; int record, temp = b.length; for (int i = 0; i < b.length - 1; i++) { record = 0; if (b[i] != 0x2F || b[i + 1] != 0x2A) { record = filterenterblank(b, i, record); } else { int index = i; record = filternote(b, index, record); index += record; record += 4; record = filterenterblank(b, index + 2, record); } if (record != 0) { int j = b[i] != 0x2F || b[i + 1] != 0x2A ? i + 2 : i; moveelems(b, j, record); fillinvalid(b, record); } if (b[i] == 0X00) { temp = i; break; } } bb = new byte[temp]; System.arraycopy(b, 0, bb, 0, temp); return bb; }
增加两个过滤方法:
1、过滤空格以及换行:
final static public int filterenterblank(byte[] b, int i, int record) { boolean flag = true; if (i + 1 < b.length && b[i] == 0x0D && b[i + 1] == 0x0A) { flag = true; for (int j = 0; flag && j < b.length - 2; j++) { if (i + j + 2 < b.length - 1 && b[i + j + 2] == 0X20) { record++; } else if (i + j + 3 < b.length - 1 && b[i + j + 2] == 0x0D && b[i + j + 3] == 0x0A) { record = record + 2; j++; } else { flag = false; } } } return record; }
2、过滤注释。
final static public int filternote(byte[] b, int i, int record) { while (i + 1 < b.length && !(b[i] == 0x2A && b[i + 1] == 0x2F)) { i++; record++; } return record; }
提取两个方法:
1、移动元素。
final static public void moveelems(byte[] b, int i, int record) { for (; i < b.length - record; i++) { b[i] = b[i + record]; } }
2、填充无效字符,为以后的拷贝数组提供依据。
final static public void fillinvalid(byte[] b, int record) { for (int k = 0, m = b.length - 1; k < record; m--, k++) { if (k == record - 2) { b[m] = 0x0A; b[m - 1] = 0x0D; break; } else { b[m] = 0x00; } } }
OK,暂时还是很满意,没有发现再大的BUG。
发表评论
-
EXTJS4 郁闷的Loading
2011-12-27 22:24 3253使用EXTJS4,写联动的combo控件,首次选择联动效果,可 ... -
我想,我得回到servlet中去!
2008-12-30 14:58 969华丽的外表掩盖了太多的实质。 servlet真的很强大,重 ... -
propedit,OK!
2008-12-30 14:52 1487在eclipse下开发,建立个messages_zh_CN.p ... -
简单示例搭建框架之一
2008-12-19 13:59 2321一直自己搭建框架的意 ... -
http://www.androidcn.net/wiki/index.php/
2008-12-01 15:28 0http://www.androidcn.net/wiki/i ... -
Android竟然会出现这样的问题??
2008-12-01 14:11 1080运行android程序后,我的磁盘空间不断减少,不知道为什么? ... -
Zip压缩继续分析
2008-11-24 10:58 1109前面的一篇文章说明了压缩以及解压缩,但是对于字节流的分析表示, ... -
java中的压缩以及解压类
2008-11-22 08:40 1815在查看zip以及unzip的时候,看到了这两个类(Deflat ... -
关于zip文件的字节码处理
2008-11-21 09:39 1222昨天写了一篇关于压缩文件以及压缩文件解压问题,现在对于自己压缩 ... -
Zip以及UnZip处理
2008-11-20 11:26 1394早上看到一篇关于压缩文件的处理文章,测试之后发现解压缩unzi ... -
自己处理公式
2008-11-18 15:03 984问题说明: 给定一个字符串,例如: String gsstri ... -
到底谁的效率高??
2008-11-17 11:24 1090在写代码的时候,常常使用if-else显得很麻烦,对于简单的赋 ... -
代理、监听器的理解,希望指点。
2008-10-31 17:29 919首先定义一个接口: public interface IWor ... -
手机触摸屏程序开发
2008-10-24 14:15 2426使用J2ME技术实现手机触摸屏开发的方法: 首先的修改调试环 ... -
J2EE中的基础知识
2008-10-23 12:58 1013转载:用于学习 J2EE ... -
OO的五大原则
2008-10-22 16:08 868OO的五大原则 OO的五大原则是指SRP、OCP、 ... -
奇怪而又无可厚非的类加载顺序
2008-10-21 09:05 4039昨天看到这样一篇帖子 ... -
笔试题目(摘)
2008-10-15 12:34 01、计算机系统中采用补 ... -
think in java回顾整理之RTTI
2008-10-10 15:08 2674运行期类型鉴定(RTTI)的概念初看非常简单——手上只有基础类 ... -
think in java回顾整理之传递以及返回对象
2008-10-10 15:07 1148Java是有指针的!事实上,Java中每个对象(除基本数据类型 ...
相关推荐
2、 对指定的文本文件进行读操作,将每一行字符串保存到一个动态空间中(可用地址指针数组或链表,也可用STL,这个随便),并显示出该文本文件的行数,最好是显示到一个编辑框中,也可以用提示框显示;(30) 3、 ...
1,strs.zip 实现字节数组, 同c中的字符数组一样好用(6KB)<END><br>2,modules.zip 字符串处理的12个...191.zip 字符串处理的12个例子(13KB)<END><br>23,192.zip 检测文件中是否包含指定字符串(1KB)<END>
1.FME常用转换器之字符串操作类视频讲解,讲解如何使用FME对字符串文件进行操作处理。 2.本视频讲解中使用的FME版本为2020.2中文版。 3.本资源仅为视频讲解,用户需自行安装相应版本的FME。
93.zip 演示快速排序算法(12KB) 19,62.zip 子分类技术的应用 (3KB) 20,45.zip 用VB写“多线程”程序(9KB) 21,190.zip 字符串查找和替换的实现例子(1KB) 22,191.zip 字符串处理的12...
1、批量替换文件内容或文件批量改名:既批量处理多个文件,又批量处理多个替换串;提高了数据处理的效率,使数据在各个不同的系统中可以灵活转换;是数据处理、网页维护、源代码或资源文件修改等方面的好帮手; 2、...
C语言提供了丰富的标准库函数,使得处理文本文件和字符串操作变得简单高效。通过编写相应的读取和写入函数,开发者可以快速地将应用程序的配置信息与INI文件进行同步,确保配置的持久化和一致性。 在实际应用中,...
将字符串转化为数组,资源为pb9导出来的文本文件,可以直接导入pb9,也可以打开查看
字符串-Java解题分析-学习资料.zip 是一个关于Java中字符串处理的解题分析和学习资料的压缩文件。该资源主要涵盖了Java中字符串的基本操作、常见算法和问题解析,旨在帮助开发者深入理解字符串在Java中的运用,提高...
### CCJ多功能文件处理与编译器 V2.3 源代码开源地址:https://github.com/thtfcccj/FileMergeIndex.git * 资源文件合并: 将不同类型文件如各种图像合并成一个bin文件,并在头部生成位置数组(可理解为其指针),供...
文件名包含全路径名(10KB)<END><br>12,profile.zip 操作ini文件的例子(5KB) 13,scanfile.zip 如何在一个长文件中查找某一个特定的字符串(2KB)<END><br>14,iniedit.zip 如何编辑ini文件以及任何包含文本...
C#串口通信时丢失数据的一种解决方法,刘凯,周云耀,C # 串行类( SerialPort )为串口通信提供了简便方法,且具有功能强大、通信快速、实时性好等特点。但在实际应用中,在串口高波特率大信
1.2 自己制作简单的串口线 1.2.1 三线制串口接线的规定 1.2.2 焊接制作自己的串口连接线 1.3 调试串口通信程序时的几种使用串口的技巧 1.3.1 查看计算机串口资源 1.3.2 常规调试-2个物理串口之间的通信 1.3.3...
S32K串口发送和接收寄存器操作方式,不同于S32DS的库文件操作方式,该方式更加简便,更加节省资源。
ExStudPE_ResExplorer_资源处理扩展插件 __[@贺胖哥绝对不胖 o(︶︿︶)o]__ 插件版本:v1.0.6 (Ansi) 主程序: 适用于 ExStudPE v1.4.3 及以上版本(兼容Unicode版) 【下载】 安装方法:讲本插件解压缩或者直接...
内容索引:VC/C++源码,字符处理, 一个VC++可重用的字符串处理函数集,这些函数主要包括: ... 压缩包中包含StringFunctins.h和StringFunctins.cpp是字符串处理函数的头文件和实现文件,main.cpp和main.h是一
#include <string> 用于处理字符串。 在main函数中,创建了一个std::ifstream对象inputFile,该对象用于读取文件。 使用try-catch块来尝试打开文件example.txt。如果打开文件时发生异常(例如文件不存在或权限不足...
【项目资源】:包含前端、后端、移动开发、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源等各种技术项目的源码。包括C++、Java、python、web、C#、EDA等项目的源码。 【适用人群】:适用于希望...
2.4.3 改进三:彻底关闭串口,释放串口资源 44 第3章 控件mscomm串口编程 46 3.1 mscomm控件介绍 46 3.1.1 vc中应用mscomm控件编程步骤 46 3.1.2 mscomm控件串行通信处理方式 47 3.1.3 mscomm 控件的属性说明 ...
人力资源管理软件功能介绍 本人力资源软件包含人事档案管理 本人力资源软件包含工资管理 本人力资源软件包含考勤管理 本人力资源软件包含绩效管理 本人力资源软件包含用户管理 本人力资源软件软件界面美观,...
自己写的比较完善的文件操作jar文件,实现了文件/文件夹的一些常用的操作,实现了文件的压缩解压,实现了部分字符串处理…… 资源分不够的朋友 欢迎进盟网〃编程交流中心(群):10939695群中提供下载及源码交流 更多...