我用下面代码读取编码格式为GBK的资源文件时,如果文件内容为英文,这样可以一次性读取,而如果内容为中文的话,创建的chars 数组的空间就会大出一倍,浪费了资源,只好用char[] chars = new char[is.available() / 2];来处理,如果是混合数据时就更不好说了,代码如下:
InputStream is = getClass().getesourceAsStream(resourceName);char[] chars = new char[is.available()];
InputStreamReader isr = new InputStreamReader(is);
StringBuffer tmpBuffer = new StringBuffer();while (isr.read(chars) != -1) {
tmpBuffer.append(chars);
}其实我的目的想实现一次性读取资源文件的内容,即传入正确地char[] chars = new char[right number],来达到加快读取的速度,如果我用byte[] bytes = new byte[is.available()];来读取编码为UTF-8的文件,则可以一次性读取,但上述情况就不行,用InputStreamReader读取GBK编码的文件,用is.available()读中文时返回的是双字节,即创建了双倍大小的缓冲数组,而isr.read(chars)读取的GBK编码文件的中英文只占一个字符,这样如果资源文件的内容为{你好,hello}的话,创建的数组大小为11,而isr.read(chars)读入的字符为8,后面三位为空,造成了资源浪费,所以想请大家给个解决思路,谢谢!
InputStream is = getClass().getesourceAsStream(resourceName);char[] chars = new char[is.available()];
InputStreamReader isr = new InputStreamReader(is);
StringBuffer tmpBuffer = new StringBuffer();while (isr.read(chars) != -1) {
tmpBuffer.append(chars);
}其实我的目的想实现一次性读取资源文件的内容,即传入正确地char[] chars = new char[right number],来达到加快读取的速度,如果我用byte[] bytes = new byte[is.available()];来读取编码为UTF-8的文件,则可以一次性读取,但上述情况就不行,用InputStreamReader读取GBK编码的文件,用is.available()读中文时返回的是双字节,即创建了双倍大小的缓冲数组,而isr.read(chars)读取的GBK编码文件的中英文只占一个字符,这样如果资源文件的内容为{你好,hello}的话,创建的数组大小为11,而isr.read(chars)读入的字符为8,后面三位为空,造成了资源浪费,所以想请大家给个解决思路,谢谢!
你的理解没错,就是想得到文件的字符数,不过中间那句没有完全弄明白。
你的疑问我可以这么解释:
代码是J2ME的,运行在手机中,在有限的内存资源和cpu处理能力的情况下,部分优化还是可以带来性能提升的
用UTF-8编码的资源文件,再用InputStream来读,可以一次性读取,已经实现,但针对那些是GBK编码的文件,InputStreamReader读就未能达到预期的效果,:P,其实这也是一个试验而已,有点类似与上例的type=0或是1一样,两种实现方式而已
http://community.csdn.net/Expert/topic/4918/4918607.xml?temp=.233761
InputStream is = getClass().getresourceAsStream(resourceName);
InputStreamReader isr=new InputStreamReader(is,"GBK");/*inputstreamreader可以将inputstream转换为字符串类型的数据,而不是字节类型的数据。GBK表示转换为字节转换为字符的字符集编码*/
BufferdReader br=new BufferedReader(isr);/*取代了StringBuffer的功能进行缓存*/
但不好意思,BufferdReader在本例的MIDP中不支持,谢谢!