- 浏览: 164875 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zbg1983:
jumboluo 写道这是一个Ext的一个bug:http:/ ...
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 3354使用EXTJS4,写联动的combo控件,首次选择联动效果,可 ... -
我想,我得回到servlet中去!
2008-12-30 14:58 1040华丽的外表掩盖了太多的实质。 servlet真的很强大,重 ... -
propedit,OK!
2008-12-30 14:52 1560在eclipse下开发,建立个messages_zh_CN.p ... -
简单示例搭建框架之一
2008-12-19 13:59 2369一直自己搭建框架的意 ... -
http://www.androidcn.net/wiki/index.php/
2008-12-01 15:28 0http://www.androidcn.net/wiki/i ... -
Android竟然会出现这样的问题??
2008-12-01 14:11 1157运行android程序后,我的磁盘空间不断减少,不知道为什么? ... -
Zip压缩继续分析
2008-11-24 10:58 1168前面的一篇文章说明了压缩以及解压缩,但是对于字节流的分析表示, ... -
java中的压缩以及解压类
2008-11-22 08:40 1855在查看zip以及unzip的时候,看到了这两个类(Deflat ... -
关于zip文件的字节码处理
2008-11-21 09:39 1273昨天写了一篇关于压缩文件以及压缩文件解压问题,现在对于自己压缩 ... -
Zip以及UnZip处理
2008-11-20 11:26 1433早上看到一篇关于压缩文件的处理文章,测试之后发现解压缩unzi ... -
自己处理公式
2008-11-18 15:03 1026问题说明: 给定一个字符串,例如: String gsstri ... -
到底谁的效率高??
2008-11-17 11:24 1138在写代码的时候,常常使用if-else显得很麻烦,对于简单的赋 ... -
代理、监听器的理解,希望指点。
2008-10-31 17:29 955首先定义一个接口: public interface IWor ... -
手机触摸屏程序开发
2008-10-24 14:15 2467使用J2ME技术实现手机触摸屏开发的方法: 首先的修改调试环 ... -
J2EE中的基础知识
2008-10-23 12:58 1092转载:用于学习 J2EE ... -
OO的五大原则
2008-10-22 16:08 957OO的五大原则 OO的五大原则是指SRP、OCP、 ... -
奇怪而又无可厚非的类加载顺序
2008-10-21 09:05 4167昨天看到这样一篇帖子 ... -
笔试题目(摘)
2008-10-15 12:34 01、计算机系统中采用补 ... -
think in java回顾整理之RTTI
2008-10-10 15:08 2709运行期类型鉴定(RTTI)的概念初看非常简单——手上只有基础类 ... -
think in java回顾整理之传递以及返回对象
2008-10-10 15:07 1178Java是有指针的!事实上,Java中每个对象(除基本数据类型 ...
相关推荐
资源文件是程序中存储非代码数据的地方,这些数据可能包括图标、图片、声音、文本字符串或其他任何类型的二进制数据。在C#中,资源可以通过.resx文件创建,这是一个XML格式的文件,用于存储键值对,其中键是资源的...
然后,根据这些路径打开文件,读取输入数据,进行必要的字符串处理;处理完成后,将结果写入到指定的输出文件。同时,为了确保程序的健壮性,需要处理可能出现的异常,如文件不存在、读写权限不足等。 在提供的...
在C#编程中,资源文件处理是一个至关重要的环节,它涉及到应用程序中的图片、音频、文本、配置文件等各类素材的管理。本篇文章将深入探讨如何在C#中有效地管理和操作这些资源,以便在项目开发中实现高效且灵活的资源...
Java编程语言提供了丰富的API用于处理文件操作,包括创建、读取、写入和删除文件等。在Java中,写文件是通过`java.io`包中的类实现的,主要涉及File类、FileWriter类、BufferedWriter类等。下面将详细阐述Java写文件...
资源文件通常包含非代码数据,如配置信息、文本字符串、图片、音频或视频等,它们能够使程序更加灵活和可维护,同时也为开发者提供了便利的错误处理机制。 资源文件`.properties`是一种广泛使用的格式,尤其适用于...
7. **压缩包子文件**:提供的文件列表中,如Unit1.pas可能是Delphi的源代码文件,NetConfig.exe是编译后的可执行文件,brcc32.exe是RC(Resource Compiler)工具,用于处理资源文件。其余文件如Unit1.dcu、Unit1.dpr...
在串口文件传输中,资源管理非常重要,包括串口资源、内存资源以及可能的网络资源。源代码应该有良好的错误处理机制,确保在异常情况下正确释放资源,防止内存泄漏或串口占用不释放。 8. **调试与测试**: 开发者...
在ASP.NET中,你还可以在ASPX页面上直接使用`Localize`控件或`Resx`数据绑定表达式来引用资源文件中的字符串。例如: ```asp.net $ Resources:Resources, Greeting %>" /> ``` 对于用户界面的动态切换,你可以通过...
5. **保存数据至TXT文件**:将处理好的数据保存到TXT文件,可以使用“File Write String”函数。指定文件路径和写入模式(覆盖或追加),然后传递要写入的字符串。每次读取到新的串口数据后,都可以调用这个函数更新...
### Windows二进制字符串资源的处理方法 #### 一、字符串资源的概念与重要性 在Windows GUI程序开发中,资源管理是一项重要的任务。资源是指用来描述界面或其他特征的描述性字符,例如图标、对话框、菜单等。这些...
总的来说,ymodem协议是串口通信中一种高效且可靠的文件传输方式,尤其适用于资源有限的环境。通过理解和使用ymodem,你可以更好地理解和控制串口设备之间的数据交换,这对于嵌入式开发、物联网应用或者对老旧硬件的...
VB.NET(Visual Basic .NET)是Microsoft开发的一种面向对象的编程语言,它提供了丰富的功能来处理资源文件。本篇文章将详细介绍如何利用VB.NET创建一个资源文件编辑器,并探讨其核心概念和技术。 首先,我们需要...
在现代软件开发中,高效地处理大量数据是一项基本需求,尤其是在处理文件系统中的文本数据时。"多线程字符串代码文件搜索器"正是为了解决这一问题而设计的。这个工具是用VC(Visual C++)编写的,它具备强大的功能,...
在VB.NET编程中,资源文件的管理是一项重要的任务,它涉及到程序中静态数据的存储和访问,如字符串、图像、音频、配置文件等。资源文件的嵌入和调用不仅有助于代码的组织,还能提高程序的可移植性和安全性。本示例...
"C++字符串处理类库及范例"就是这样一个资源,它专门针对字符串操作进行了优化,提供了强大的功能,包括字符串的分割、自定义分隔符的使用、字符串匹配和搜索等。这个库无需编译和安装,可以直接在项目中应用,大大...
资源文件是一种专门用于存储程序所需的各种类型资源(如位图、图标、字符串等)的文件。使用资源文件可以显著提高应用程序的性能和维护性,因为它们允许开发者将频繁使用的资源(如图标和图片)与代码分离,并且能够...
在C#编程中,资源文件是一个非常重要的概念,它允许开发者在应用程序中嵌入各种类型的数据,如文本、图像、音频、视频等。资源文件的使用可以极大地提高代码的组织性和可维护性,并且便于国际化和本地化。下面将详细...
描述中的“9KB”可能是指相关代码或资源的大小,这通常表示这是一个相对较小的文件,可能包含了基础的字符串处理功能。 在大多数编程语言中,字符串处理函数提供了丰富的功能,如: 1. **创建与初始化**:如`str()...
2. **关闭串口**:在完成串口通信后,需要调用`Close()`方法关闭串口,释放资源。关闭串口的代码如下: ```csharp serialPort.Close(); ``` 3. **读取数据**:使用`ReadLine()`或`ReadBytes()`方法可以获取串口接收...
资源是Windows应用程序中的一个重要组成部分,它们可以是图标、位图、对话框模板、字符串、菜单、声音文件等。资源通过.rc(Resource Script)文件进行定义,编译后生成.res文件,最终被链接器合并到可执行文件中。 ...