- 
            
            RandomAccessFile java提供对文件内容的访问,既可以读文件,也可以写文件 RandomAccessFile支持随机访问文件,可以访问文件的任意位置 - java文件模型 - 在硬盘上的文件是byte byte byte存储的,是数据的集合 
- 打开文件 - 有两种模式“rw”(读写)“r”(只读) - RandomAccessFile raf = new RandomAccessFile(file,"rw"); - 文件指针,打开文件时指针在开头pointer = 0; 
- 写方法 - raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入 
- 读方法 - int b = raf.read();--->读一个字节,然后把字节转换成整数 
- 文件读写完成以后一定要关闭(Oracle官方说明) 
 查看全部
- 
            
            BufferedOutputStream/BufferedInputStream:字节缓冲流 在使用字节缓冲流时在写入过程中必须刷新。使用.flush();方法。 使用方式:BufferedOutputStream bos=new BufferedOutputStream(FileOutputStream文件输入流); FileOutputStream批量读取效率>BufferedOutputStream中readXxx()>FileoutputStream中read();  查看全部 查看全部
- 
            
            - RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件 
- RandomAccessFile支持随机访问文件,可以访问文件的任意位置 
- java文件模型:在硬盘上的文件是byte byte byte存储的,是数据的集合 
- 打开文件有两种方式:rw(读写),r(只读) 
- RandomAccessFile raf = new RandomAccessFile(file,"rw") 
- 文件指针,打开文件时指针在开头pointer = 0; 
- 写方法:raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入 
- 读方法:int b = raf.read()--->读一个字节 
- 文件读写完成以后一定要关闭 
- File创建文件夹:mkdir()方法,创建文件:createNewFile()方法 
- 指针的位置:getFilePointer()方法 
- int i = 0x7fffffff;(最大的整数,占4个字节,write方法要写4次) 
- raf.write(i >>> 24);//高8位 raf.write(i >>> 16); raf.write(i >>> 8); raf.write(i); 
- 直接写一个int,使用writeInt()方法 
- String s = "中"; byte[] gbk = s.getBytes("gbk"); raf.write(gbk); 显示文件长度:raf.length()方法 
- 读文件,必须把指针移到文件头部:raf.seek(0); 
- 一次性读取,把文件中的内容都读到字节数组中:byte[] buf = new byte[(int)raf.length()]; raf.read(buf); System.out.println(Arrays.toString(buf)); 
 查看全部
- 
            
            有的时候我们想要把一个Java对象变成字节流的形式传出去,有的时候我们想要从一个字节流中恢复一个Java对象。例如,有的时候我们想要 把一个Java对象写入到硬盘或者传输到网路上面的其它计算机,这时我们就需要自己去通过java把相应的对象写成转换成字节流 查看全部
- 
            
            Read/Write 的两个实现类Inpu/OutputStreamRead/Write , FileRead/Writer ,前者构造方法需要 Inpu/OutputStream 的对象,创建时可以更改编码方式,后者 构造方法是 File 的对象 ,相对简单一点,但创建时不可以更改编码方式,在调用时注意编码方式 查看全部
- 
            
            Io流查看全部
- 
            
            对象的序列化 查看全部
- 
            
            flush()这个函数是清空的意思,用于清空缓冲区的数据流,进行流的操作时,数据先被读到内存中,然后再用数据写到文件中,那么当你数据读完时,我们如果这时调用close()方法关闭读写流,这时就可能造成数据丢失,为什么呢,因为,读入数据完成时不代表写入数据完成,一部分数据可能会留在缓存区中,为了理解这个问题,我们举一个例子: 比如,在农村,几乎每家都有抽水机,抽水机的作用是什么呢,就是把水井里的水抽到水缸中,这时我们就会用水管连接抽水机和水缸(水管就好比是缓冲区),当我们想把水井中的水都抽到水缸中时,我们就让抽水机工作抽水,如果我们发现水井里的水刚好抽完时,我们就会关掉抽水机的开关停止抽水,那么这时,管道里就会遗留一部分水,抽水就是读数据,水缸进水就是写数据,水管充当缓存区的角色,不知道这样是不是具象化了呢 那么这样一来我们如果中途调用close()方法,输出区也还是有数据的,就像水缸里有水,只是在缓冲区遗留了一部分,这时如果我们先调用flush()方法,就会强制把数据输出,缓存区就清空了,最后再关闭读写流调用close()就完成了。 --------------------- 作者:Hunter_first 来源:CSDN 原文:https://blog.csdn.net/lsx991947534/article/details/45065773 查看全部
- 
            
            输出16进制时进行与运算0xff的原因: OxFF的16进行为 :000000FF。任意数与OxFF进行与运算都是取16进制的后两位 
 运算示例如下:
 -127(负数127)的16进制为: FFFFFF81
 0xFF的16进制为: 000000FF
 则&(与)运算是结果为: 00000081
 所以:Integer.toHexStriing(-127 & 0xFF) 的结果为:81。查看全部
- 
            
            当父类已经实现 Serializable 接口时,子类不需要重复实现该接口。 注意:若其更高层的某一父类没有实现该接口,则在反序列化时,会显示调用其父类的构造函数。(已实现该接口的类在反序列化是不会显示调用其构造函数) 查看全部
- 
            
            transient关键字:修饰的变量在被序列化是会被jvm默认跳过。但仍然可以通过其他方式完成对该变量的序列化,参照ArrayList源码。 查看全部
- 
            
            - GBK编码:中文占用2个字节,英文占用1个字节 
- UTF-8编码:中文占3个字节,英文占用1个字节 
- UTF-16be编码:中文占2个字节,英文占用2个字节 
- 当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码。 
- 文本文件里面放的时字节序列,可以是任意编码的字节序列 
- 如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ansi编码 
 查看全部
- 
            
            Application Programming Interface,应用程序编程接口 查看全部
- 
            
            java I/O 输入输出流  查看全部 查看全部
- 
            
            2 案例演示: 也可以删除这个目录 file.delete(); 查看全部
举报
 
             
         
                 
                 
                 
                 
                 
                 
                 
                