Integer.toHexString(Byte);//以十六进制的方式显示
二、File工具类的使用
         1、File类用于表示文件和目录都可以
            File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问
         2、File类的基本API(看手册)
                构造函数的情况
                创建功能:createNewFile(),mkdir(),mkdirs()
                删除功能:delete()
                重命名功能:renameTo()
                判断功能:isFile(),isDirectory(),exists()等
                获取功能:getName(),getPath(),list()等
                文件过滤器的作用:list(FilenameFilter filter),返回满足指定条件的文件列表
                
            判断参数的时候,可以使用IllegalArgumentException参数抛出异常
            File.separator设置目录分隔符,Windows、Unix都识别
            相对目录是当前目录,也即在项目的根目录下
         3、遍历目录(递归 dir.listFiles())
            访问文件系统的时候因为是与JVM以外的资源进行交互,所以,写代码一定要严谨,把各种情况考虑到了
             
三、RandomAccessFile类的使用
       1、RandomAccessFile java提供的对文件内容的访问,既可以读,也可以写
          且支持随机访问文件,可以访问文件的任意位置
       2、Java文件模型
             在硬盘上的文件是byte byte byte存储的,是数据的集合
       3、打开文件              
1 RandomAccessFile raf =newRandomAccessFile(file,"rw");//rw,读写,r只读
2 //打开文件时,文件指针在开头,pointer = 0;
3 raf.write(byte);//write方法只会写一个字节,同时直接指针指向下一个位置
4 int b = raf.read();//每次读一个字节,java中每个字符占用两个字节,使用右移8位的方式分次写入
5 raf.seek(指针位置);//移动指针
6 raf.close();//文件读写完一定要关闭,否则可能会有意想不到的后果
 
 
 
          在文件下载文件的时候,这种方式有很大的好处,每个线程下载文件的一部分,
          然后再拼接在一起,迅雷就是使用的这种方式,会记录指针的位置
 
四、字节流(InputStream、OutputStream,两个都是抽象类)
         1、I/O流用来处理设备之间的数据传输
            InputStream抽象了应用程序读取数据的方式
            OutputStream抽象了应用程序写出数据的方式
         2、EOF = End  读到 -1 就读到结尾
         3、输入流的基本方式主要是读
              int b = in.read();//读取一个字节无符号填充到int第八位,-1是EOF
              in.read(byte[] buf);//读入多个字节填充的字节数组
         4、输出流的基本方式主要是写
              out.write(int b);
              out.write(byte[] buf);
         5、FileInputStream具体实现了文件的读取操作
                while((b=in.read())!=-1){读一个文件}
                in.close();//一定要记得关闭流释放系统资源
                批量读取(速度非常快,效率高) vs. 单字节读取(不适合读大文件,效率很低)
          6、FileOutputStream具体实现了向文件中写数据的操作
                是删除文件重新创建,还是在原文件上追加内容,看构造方法
                自己实现文件的copy操作
                out.flush();
                out.close();
          7、数据输入输出流DataOutputStream/DataInputStream
                对流功能的扩展,是一个包装类,可以更加方便的读取int,long,字符等类型数据,本质是使用的一种装饰模式实现的
         8、字节缓冲流BufferedInputStream/BufferedOutputStream
                 为I/O提供了带缓冲区的操作,这种流模式提高了I/O的性能     
                 .write();
                 .flush();//刷新缓冲区,否则写入不到文件中
                 .close();
 
五、字符流(参考API)
       1、Java为什么引入字符流?
             操作文本时,尤其是包含中文字符等非ASCII码的字符会很不方便
             字符流 = 字节流+编码
             所以,要对编码问题非常清楚   
       2、java的文本(char)是16位无符号整数,是字符的Unicode编码(双字节)    
          文件是byte byte byte……的数据序列
          文本文件是文本序列按照某种编码方式序列化为byte的存储
       3、字符流(Reader Writer)操作的是文本文件
          一次处理一个字符,字符的底层仍然是基本的字节序列
          InputStreamReader 完成byte流按照编码解析为char流
          OutputStreamWriter 提供char流按照编码解析成byte流
       4、文件读写流  FileReader、FileWriter
             没法设置编码,必须回到字符流设置编码
       5、字符流的过滤器BufferedReader、BufferedWriter、PrintWriter
             readLine  可以一次读一行,一次写一行
             可以设置编码,不识别换行,单独写出换行操作
 
六、对象的序列化和反序列化