-
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();
查看全部
举报