比如说一种极端情况下,处理的文件全是英文的,JAVA程序把这些文件的内容都读进内存的时候就等于浪费了一半的内存空间(这一半的内存空间全是十六进制的00),请问是这样吗?

解决方案 »

  1.   

    应该没这个问题再说现在哪个语言不是Unicode呢? 除非还是DOS下的16位C语言, 也就是大学里讲的C语言 : (
      

  2.   

    楼上说的C语言是用的什么字符集?
    还有就是比如有种语言就是用的ISO-8859-1或ASCII来处理,它只针对处理纯英文的文件,那它处理同样大小的文件应该差不多用到JAVA一半的内存量,是不是可以这样理解?
      

  3.   

    我觉得楼主理解没错呀
    如果纯字母得话,unicode相比ascii确实浪费了一半内存
      

  4.   

    有这个问题比如char型数据,C语言是8位的,Java是16位的,也就是说java的char型可以存储一个中文(汉字),C的就不行但同时Java不是有垃圾回收机制吗?
      

  5.   

    要转为utf-8的编码.我是用的BufferedReader的readLine方法读取网页的每行内容后在append到一个StringBuilder里,然后再用new String(StringBuilder)来创建一个String对象,再用String.getBytes("utf-8");来得到我需要的utf-8字节数组.但是问题是我再把网页的每行内容append到StringBuilder里的时候应该是append的gb2312的编码.所以用String.getBytes("utf-8");应该得不到我想要的正确的utf-8编码.但是它却得到了正常显示的utf-8的网页.我不知道JAVA的StringBuilder的append方法是否会根据JVM默认的操作系统字符集来隐式的把gb2312->unicode这个步骤给做了?如果是这样,我把程序放到iso-8859-1的linux服务器上是不是会出问题了?请知道的朋友指点一下,谢谢~
      

  6.   

    我测试了一下,放到linux上生成的新utf-8的网页显示的都是乱码,我的中文windows生成的新utf-8的网页显示的正常.
      

  7.   

    LS的问题难道是因为linux 的char 是8位的 ?
      

  8.   

    linux 的char 是8位的?怎么会啊,JAVA在哪个平台上都一样的.双字节编码.
      

  9.   

    还有个问题,比如说我抓了一个gb2312编码的网页内容后,要转为要转为utf-8的编码.我是用的BufferedReader的readLine方法读取网页的每行内容后在append到一个StringBuilder里,然后再用new String(StringBuilder)来创建一个String对象,再用String.getBytes("utf-8");来得到我需要的utf-8字节数组.但是问题是我再把网页的每行内容append到StringBuilder里的时候应该是append的gb2312的编码.所以用String.getBytes("utf-8");应该得不到我想要的正确的utf-8编码.但是它却得到了正常显示的utf-8的网页.我不知道JAVA的StringBuilder的append方法是否会根据JVM默认的操作系统字符集来隐式的把gb2312->unicode这个步骤给做了?如果是这样,我把程序放到iso-8859-1的linux服务器上是不是会出问题了?请知道的朋友指点一下,谢谢~