博客统计信息

用户名:cfan_haifeng
文章数:12
评论数:27
访问量:29597
无忧币:50
博客积分:626
博客等级:4
注册日期:2008-07-05

我最近发表的评论

Linux和Windows在.. 回复
不客气,经常去我的网站做客吧,呵..
Linux和Windows在.. 回复
谢谢,呵呵!
Linux和Windows在.. 回复
真的啊,哈哈,开心!
合理使用DNS中的.. 回复
嗯,谢了
小烦恼 回复
我汗!
2011-11-03 15:16:56
Lucene-入门,详建附件
 
2010-11-09 09:30:24
        我所在的城市比较小,平时大家用自己行车就OK了,了不起搞个电动车,所以鄙人几乎没做过公交。昨天,爷爷把老年公交卡办来了,听说这玩意做车不要钱,本着“有便宜不占,就是王八蛋”的指导思想,我当仁不让的拿着出去感受了……



      公交来了,我美滋滋的上去,并且潇洒的刷了一下卡,让后哥听到一个声音在公交车上回荡:“老年卡! 老年卡!! 老年卡!!!”



     哥僵..
2010-02-05 13:12:41





v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}



Normal
0

7.8 磅
0
2

false
false
false














MicrosoftInternetExplorer4










/* Style Definitions */
table.MsoNormalTable

{mso-style-name:普通表格;

mso-tstyle-rowband-size:0;

mso-tstyle-colband-size:0;

mso-sty..
    我身边的人多数人都是先用Windows,在用Linux的。因而学习Linux时,多数普通人也是对照着Windows来学的。不过听说天才不用对比,可惜,我不是(唉,天才到底是啥感觉啊)。

    所以区分Windows和Linux的不同,可以帮助我们这些普通人更好的学习Linux。作为初学者,我想Linux的目录和分区是最让人迷惑的了,不过在鸟哥的帮助下,我似乎明白了一些,其体会如下:



1.Windows和Linux的区别1: 硬盘分区

在正常情况下使用Windows和Linux都要对硬盘进行分区,

当只有一块硬盘,且仅有三个分区时,情况如下:

Windows: C,    D,    E;

Linux:   hda1, hda2, hda3;

(这是针对IDE硬盘的情况,hd想必是Hard drive的简称,至于a表示第一块磁盘,1表示第一个分区,2……,SCSI硬盘则为sda1,ada2,sda3,难道是scsi drive的缩写,:-D,更多请看各硬件在Linux中的名称)



当有两块硬盘,且每块硬盘各三个分区,则情况如下(臆测,呵呵):

Windows: C,    D,    E;    F,    G,     H;

Linux:   hda1, hda2, hda3; hdb1,hdb2, hdb3



区别1总结:

    Windws在这一层上作了合适的抽象,使用户不必了解细节,仅知道有哪几块分区可用就好了。而在Linux下,用户仅通过分区名称就可以了解硬盘的具体信息,如该分区位于哪块硬盘、哪种类型的硬盘,习惯了也很方便



2.Windows和Linux的区别2: 目录

Windows:Windows下的目录和分区完全就是一回事(个人认为),不过没用过Linux的用户可能并不理解这一点,呵呵,因为从来就没有怀疑过。



Linux就大大不同了(以下部分我还不完全确定,也是臆测):Linux的目录是抽象的,它和分区没有直接关系。所以说在 Windows下目录C对应的是C分区,目录D对应的是D分区,目录……;但不要指望Linux下hda1目录对应的是第一块硬盘的第一个分区(好像,也 不能完全这么说,但是我们通常告诉小学生“1-3”是错误的,呵呵,有助于理解)。在Linux下目录和分区是这样的:





    所以当你通过cd命令或双击等任何途径进入顶级目录时(cd /),其实你对应的物理位置却为分区2-hda2;进入子目录A(cd 子目录A),情况类似。呵呵,明白为啥我说Linux的目录是抽象的了吧。



区别2总结:

    Windws在这一层上没有做任何抽象,目录就是分区,分区就是目录(至少表面看来是这样),所以用户在对硬盘分区时看到的效果和使用时看到的效果是一致的(个人认为即使在没有先入为主的情况下也比Linux好理解一点点)。

    Linux在目录这一层作了些抽象,可以说是在目录和分区之间作了一个映射。据我所知,具体通过两种方式:(1)安装时,选择的挂载点;(2)安装后的mount命令。

    这一点着实让本人痛苦了很长一段时间(没办法,笨啊
一直以来对编码并不是太理解,所以用java做了个实验,感觉清楚了点:

下面这个代码的功能是,获取某个字符或汉字在utf-8,gbk,gb2312,iso8859-1等下的十六进制,八进制,十进制,二进制的表示(当然,只有二进制才是其在计算机中的真真表示.)
import java.io.UnsupportedEncodingException;

public class CharEncode {
  /**
    * @param str
    *                        字符
    * @param charsetName
    *                        编码
    * @param debug
    *                        是否调试
    * @throws UnsupportedEncodingException
    */
  public static void displayEncode(String str, String charsetName,
      boolean debug) throws UnsupportedEncodingException {
    System.out.println("----------------------------------");
    byte[] bytes = str.getBytes(charsetName);
    int bytes_length = bytes.length;

    System.out.println("字符:" + str + "\t编码:" + charsetName + "\t共占用"
        + bytes_length + "bytes(字节)," + bytes_length * 8
        + "bit(位)\t每个字节的情况如下:");
    for (int i = 0; i < bytes_length; i++) {

      System.out.print("bytes[" + i + "]的十进制为:" + bytes[i]);// 获取byte字节

      Integer int_byte = (int) bytes[i];// 强制转化为int,应为bytes只占8bit,而int占32bit所以个人认为万无一失.

      String binaryString = Integer.toBinaryString(int_byte);// 获取整数的2进制的String表示方式
      String hexString = Integer.toHexString(int_byte);// 获取整数的16进制的String表示方式
      String octalString = Integer.toOctalString(int_byte);// 获取整数的16进制的String表示方式
      if (debug) {
        System.out.print("\t对应的十进制为:" + int_byte);
        System.out.print("\t对应整数的二进制为:" + binaryString);
        System.out.print("\t对应整数的八进制为:" + octalString);
        System.out.print("\t对应整数的十六进制为:" + hexString);
      }

      /** **八进制格式显示* */
      int octalString_length = octalString.length();
      System.out.print("\t八进制为:"
          + octalString.substring(octalString_length - 2,
              octalString_length));
      /** **十六进制格式显示* */
      int hexString_length = hexString.length();
      System.out.print("\t十六进制为:"
          + hexString.substring(hexString_length - 2,
              hexString_length));

      /** **为了方便阅读,将二进制以每4位一组的格式显示* */

      // 不足8位的,在前段加"0"补齐
      while (binaryString.length() < 8) {
        binaryString = "0" + binaryString;
      }
      int binaryString_length = binaryString.length();

      String first = binaryString.substring(binaryString_length - 8,
          binaryString_length - 4);// 取前4位
      String second = binaryString.substring(binaryString_length - 4,
          binaryString_length);// 取后4位

      System.out.println("\t二进制为:" + first + " " + second);

    }
    System.out.println();
  }

  public static void main(String[] args) throws UnsupportedEncodingException {

    // 通过UltraEdit知道: 汉字"我"在gbk编码下的十六进制是"ced2";

    boolean debug = false;
    String str = "";
    String utf_8 = "utf-8";
    String gbk = "gbk";
    String gb2312 = "gb2312";
    String iso8859_1 = "iso8859-1";

    str = "我";
    System.out.println("*****************" + str + "*******************\n");
    displayEncode(str, utf_8, debug);
    displayEncode(str, gbk, debug);
    displayEncode(str, gb2312, debug);
    displayEncode(str, iso8859_1, debug);

    str = "A";
    System.out.println("*****************" + str + "*******************\n");
    displayEncode(str, utf_8, debug);
    displayEncode(str, gbk, debug);
    displayEncode(str, gb2312, debug);
    displayEncode(str, iso8859_1, debug);

    str = "1";
    System.out.println("*****************" + str + "*******************\n");
    displayEncode(str, utf_8, debug);

  }
}

实验结果如下:

*****************我*******************



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

字符:我    编码:utf-8    共占用3bytes(字节),24bit(位)    每个字节的情况如下:

bytes[0]的十进制为:-26      八进制为:46    十六进制为:e6    二进制为:1110 0110

bytes[1]的十进制为:-120    八进制为:10    十六进制为:88    二进制为:1000 1000

bytes[2]的十进制为:-111    八进制为:21    十六进制为:91    二进制为:1001 0001



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

字符:我    编码:gbk    共占用2bytes(字节),16bit(位)    每个字节的情况如下:

bytes[0]的十进制为:-50    八进制为:16    十六进制为:ce    二进制为:1100 1110

bytes[1]的十进制为:-46    八进制为:22    十六进制为:d2    二进制为:1101 0010



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

字符:我    编码:gb2312    共占用2bytes(字节),16bit(位)    每个字节的情况如下:

bytes[0]的十进制为:-50    八进制为:16    十六进制为:ce    二进制为:1100 1110

bytes[1]的十进制为:-46    八进制为:22    十六进制为:d2    二进制为:1101 0010



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

字符:我    编码:iso8859-1    共占用1bytes(字节),8bit(位)    每个字节的情况如下:

bytes[0]的十进制为:63    八进制为:77    十六进制为:3f    二进制为:0011 1111  (查ASSCII码表可得"?",常见的乱码,呵呵,但为什么先取得是这个二进制呢??????)



*****************A*******************



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

字符:A    编码:utf-8    共占用1bytes(字节),8bit(位)    每个字节的情况如下:

bytes[0]的十进制为:65    八进制为:01    十六进制为:41    二进制为:0100 0001



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

字符:A    编码:gbk    共占用1bytes(字节),8bit(位)    每个字节的情况如下:

bytes[0]的十进制为:65    八进制为:01    十六进制为:41    二进制为:0100 0001



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

字符:A    编码:gb2312    共占用1bytes(字节),8bit(位)    每个字节的情况如下:

bytes[0]的十进制为:65    八进制为:01    十六进制为:41    二进制为:0100 0001



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

字符:A    编码:iso8859-1    共占用1bytes(字节),8bit(位)    每个字节的情况如下:

bytes[0]的十进制为:65    八进制为:01    十六进制为:41    二进制为:0100 0001



*****************1*******************



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

字符:1    编码:utf-8    共占用1bytes(字节),8bit(位)    每个字节的情况如下:

bytes[0]的十进制为:49    八进制为:61    十六进制为:31    二进制为:0011 0001


从中可以看出汉字在utf-8编码下,占用3个字节,GBK,gb2312占用2个字节,用iso8859-1只能取出一个字节(造成乱码的原因之一)
另外getBytes(charsetName);方法很强劲啊,回头想看看源代码,呵呵
类别:Java SE|阅读(1835)|回复(4)|(0)阅读全文>>
 <<   1   2   3   >>   页数 ( 1/3 )