Java学习笔记整理-流

一.RandomAccessFile
new RandomAccessFile(file,“rw”);
常用:
int read()->读单字节
int read(byte[])->返回有效长度,读的内容放入byte数组
int read(byte[],off,len)->返回有效长度,读的内容放入byte数组off位置开始
void write(int)->写单字节
write (byte[])->将byte数组写入文件
write(byte[],off,len)->将byte数组从off位置开始写入文件,写len个

long getFilePointer()//获取当前指针位置
seek(int)//跳到指定指针位置
skipBytes(int)//跳过对应字节数

一般用来文件加密
加密
RandomAccessFile raf=new RandonAccessFile(“t.txt”,“rw”);
int len=-1;
byte[]arr=new int[1024];
while((len=raf.read(arr))!=-1){
for(int i=0;i<len;i++){
arr[i]^=12;
}
raf.seek(raf.getFilePointer-len);
raf.write(arr,0,len);
}

二.字节流:
InputStream/OutputStream
FileInputStream(file)
FileOutputStream(file,boolean)->boolean决定是否追加
实例化:
InputStream fis=new FileInputStream(“a.txt”);
OutputStream fos=new FileOutputStream(“a.txt”)

三.缓冲流:
缓冲区:添加缓冲区的目的就是为了提高效率
访问磁盘空间,和访问缓存(内存),访问内存效率更高
字节缓冲流:-字节为单位
BufferedInputStream
BufferedOutputStream
缓冲流是通过节点流包装出来的
BufferedInputStream bis=new BufferedInpueStream(new FileInputStream(“a.txt”);
byte[]bs=new byte[20];
bis.read(bs);
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(“a.txt”);
bos.write(“哈哈”.getBytes());//缓冲流写出内容-写入到缓冲区
bos,flush();//主动刷新缓冲区
bos.close();//流关闭时,缓冲区是被动刷新
缓冲流复制:
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(“a.txt”));
BufferedOutputStream bos=mew BufferedOutputStream(ne FileOutputStream(“a_copy.txt”);
int len=-1;
byte []arr=new byte[1024]
while((len=bis.read(arr))!=-1){
bos.write(arr,0,len);
bos.flush();
}
bis.close();
bos.close();

字节流:字节为单位,不是用来读写可视内容
通常用来复制文件
又因为缓冲流效率高,所以复制文件用缓冲流
底层流就是用来生成其它高级流的
三.字符流:单位是字符-有字符集 默认字符集/指定字符集(gbk/utf-8)
1.Reader/Writer
InputStreamReader(InputStream,charset)
int read()-读单个字符
int read(char[])-返回读取的有效个数,读出来的字符存入字符数组中
int read(char[],off,len)-返回读取的有效个数,读出来的字符存入字符数组从off开始
OutputStreamWriter(OutputStream,charset)
Writer osw =new OutputStreamWriter(new FileOutputStream(“a.txt”,true),"“gbk”);
write(int)-写单个字符
write(‘a’);
write(char[])-写字符数组/字符串
osw.write(new Char[]{‘h’,‘e’,‘l’,‘l’,‘o’,’\n’});
osw.write(“哈哈\n”);
write(char[],off,len)写字符数组一部分/字符串一部分
osw.write(new char[]{‘h’,‘e’,‘l’,‘l’,‘o’,’\n’},3,2);
osw.write(“hello”,3,2);
flush()/close();
Reader isr=new InputStreamReader(new FileInputStream(“a.txt”),“gbk”);//指定字符集
char c=(char)isr.read();//读单个字符,字符本身就没有负数
char[]cs=new char[10];
int len=isr.read(cs);//读若干字符,存入字符数组中,最多读cs.length个
len=isr.read(cs,2,4);//读若干,存入字符数组从off开始的位置
2.缓冲流
PrintWriter/BufferedReader
PrintWriter pw=new PrintWriter(new OutputStreamWriter(FileOutputStream(“a.txt”,true),“gbk”),true);
//指定编码gbk,指定文件是否追加
//指定true,开启自动行刷新
pw.println(“哈哈哈哈”);
pw.print(“嘻嘻”);
pw.flush();
pw.close();
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(“a.txt”,“utf-8”));
String str=br.readLine();//读取一整行,返回null,读到文件结束
四.ObjectInputStream/ObjectOutputStream–
操作对象,字节为单位
写:现将对象转换成字节(序列化),写入文件
读:读字节,将字节转换成对象(反序列化)
使用场景:
深克隆:复制 对象+引用
使用场景:跨主机
浅克隆:object.clone()复制引用
Serializable:可序列化的-空接口
序列化:将对象转换成字节,要求对象必须是可序列化的
目的:仅用于标识可序列化的语义
serialVersionUID->类的版本号,默认情况下,通常修改内容会修改版本号
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(“obj.txt”));
//对象流拥有字节流所有的方法
//向文件中写入对象
oos.writeObject(“嘿嘿”);
oos.close();
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(“obj.txt”));
//从文件中读取对象
Object obj=ois.readObject();
ois.close();
五.Properties-key-value键值对
<String,String>
配置文件,避免硬编码,动态加载信息
.properties
.xml
连服务器:IP,端口port
www.baidu.com:域名->IP
DNS
Properties pro=new Properties();//创建对象
InputStream in=new FileInputStream(PropertiesDemo.class.getResource(“config.properties”).getFile());//读配置文件
pro.load(in);//加载配置文件
String ip=pro.getProperty(“ip”);//获取配置文件内容 key-value
String port=pro.getProperty(“port”);

总结:
字节流:InputStrem/OutputStream
FileInputStream/FileOutputStream
BufferedInputStream/BufferedOutputStream
字符流:Reader/Writer
InputStreamReader/OutputStreamWriter
BufferedReader/PrintWriter
文件复制:
BufferedInputStream/BufferedOutputStream
内容读写:
BufferReader/PrintWriter
底层流:
包装高级流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值