JAVA笔记12__字节、字符缓冲流/打印流/对象流/
/**
* !!:以后写流的时候一定要加入缓冲!!
* 对文件或其它目标频繁的读写操作,效率低,性能差。
* 缓冲流:好处是能更高效地读写信息,原理是将数据先缓冲起来,然后一起写入或读取出来。
*
* BufferedInputStream:字节缓冲流(有一个内部缓冲区数组,用于缓冲数据)
*/
public class Main {
public static void main(String[] args) {
input();
output();
} /**
* 使用字节缓冲流进行读取操作
*/
public static void input(){
try {
InputStream in = new FileInputStream("c:\\fuck\\javaTest1.txt");
BufferedInputStream bis = new BufferedInputStream(in); //根据字节输入流构造一个字节缓冲流
Reader r= new InputStreamReader(bis);
char[] cs = new char[512];
int len = -1;
StringBuilder sb = new StringBuilder();
while((len=r.read(cs))!=-1){
sb.append(new String(cs));
}
r.close();
bis.close();
in.close();
System.out.println(sb); } catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
} /**
* 使用字节缓冲流进行写入操作
*/
public static void output(){
try {
OutputStream out = new FileOutputStream("c:\\fuck\\javaTest1.txt");
BufferedOutputStream bis = new BufferedOutputStream(out); //根据字节输出流构造一个字节缓冲流
String info = "顶替要夺kasdfas山不在高";
bis.write(info.getBytes());
bis.flush(); //刷新缓冲区(把数据写入文件里)
bis.close(); //关闭了会刷新缓冲区
out.close(); } catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public class Main {
public static void main(String[] args) {
// output();
input();
System.out.println("finished.");
}
/**
* 使用字符缓冲流进行读取操作
*/
public static void input(){
try {
Reader r = new FileReader("c:\\fuck\\javaTest1.txt");
BufferedReader br = new BufferedReader(r); //根据字符输入流构造一个字符缓冲流
char[] cs = new char[512];
int len = -1;
StringBuilder sb = new StringBuilder();
while((len=br.read(cs))!=-1){
sb.append(new String(cs));
}
br.close();
r.close();
System.out.println(sb);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
/**
* 使用字符缓冲流进行写入操作
*/
public static void output(){
try {
Writer w = new FileWriter("c:\\fuck\\javaTest1.txt");
BufferedWriter bw = new BufferedWriter(w); //根据字符输出流构造一个字符缓冲流
bw.write("abcde i love u 丁");
bw.flush();
w.close();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
/**
* 打印流:主要功能是用于输出
* PrintStream:字节打印流
* PrintWriter:字符打印流
*/
public class Main {
public static void main(String[] args) {
// print();
print2();
System.out.println("finished.");
} /**
* 使用PrintStream打印流
*/
public static void print(){
try {
OutputStream out = new FileOutputStream("c:\\fuck\\javaTest1.txt");
BufferedOutputStream bos = new BufferedOutputStream(out);
PrintStream ps = new PrintStream(bos); //构造字节打印流
ps.println(3.14f);
ps.println(188);
ps.println(true);
ps.println("it has.");
ps.flush();
bos.close(); //关掉一个就行了,其它也跟着关了 } catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
} /**
* 使用PrintWriter打印流
*/
public static void print2(){
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("c:\\fuck\\javaTest1.txt"));
PrintWriter pw = new PrintWriter(bw);
pw.print("\r\n"); //输出回车换行符
pw.println(105);
pw.println("饥饿营销\"饿\"成笑话");
pw.flush();
pw.close();
bw.close(); } catch (FileNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
/**
* 对象流
* 对象序列化:将一个对象转化成二进制的byte流
* 序列化操作:将对象保存在文件上 ObjectOutputStream
* 反序列化操作:将对象从文件中恢复 ObjectInputStream
* 被序列化对象所在的类必须实现java.Serializable接口
* 序列化一组对象可采用:对象数组的形式,因为对象数组可以向Object进行转型操作
* transient关键字:声明一个实例变量,当对象存储时,它的值不需要维持。
* 当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。
* 为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。
* 当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。
*/
public class Main {
public static void main(String[] args) {
// writerObject();
// readerObject();
// writerObject2();
readerObject2();
System.out.println("finished.");
} //使用ObjectOutputStream把对象写入文件
public static void writerObject(){
try {
OutputStream out = new FileOutputStream("c:\\fuck\\obj.tmp");
ObjectOutputStream oos = new ObjectOutputStream(out); //根据字节输出流构造一个对象流
oos.writeInt(106);
Dog d1 = new Dog("fish7",15);
oos.writeObject(d1);
oos.close();
out.close(); } catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
} //使用ObjectOutputStream把一组对象写入文件(对象数组)
public static void writerObject2(){
try {
OutputStream out = new FileOutputStream("c:\\fuck\\obj.tmp");
ObjectOutputStream oos = new ObjectOutputStream(out); //根据字节输出流构造一个对象流
Dog[] dogs = {new Dog("fish7",15),new Dog("fish8",16),new Dog("fish9",17)};
oos.writeObject(dogs);
oos.close();
out.close(); } catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
} //使用ObjectInputStream读取文件中的对象
public static void readerObject(){
try {
InputStream in = new FileInputStream("c:\\fuck\\obj.tmp");
ObjectInputStream ois = new ObjectInputStream(in); //根据字节输入流构造一个对象流
int num = ois.readInt();
Dog d1 = (Dog)ois.readObject();
ois.close();
in.close();
System.out.println(num);
System.out.println(d1.name+" "+d1.age); } catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
} //使用ObjectInputStream读取文件中的一组对象(对象数组)
public static void readerObject2(){
try {
InputStream in = new FileInputStream("c:\\fuck\\obj.tmp");
ObjectInputStream ois = new ObjectInputStream(in); //根据字节输入流构造一个对象流
Dog[] dogs = (Dog[])ois.readObject();
ois.close();
in.close();
for(Dog i:dogs)
System.out.println(i.name+" "+i.age); } catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
}
} /**
* 类通过实现java.Serializable接口以启用其序列化功能,标记接口,没有任何方法
*/
class Dog implements Serializable{
String name;
transient int age; //使用transient关键字声明的属性,将不会被序列化 public Dog(String name, int age) {
this.name = name;
this.age = age;
}
}
JAVA笔记12__字节、字符缓冲流/打印流/对象流/的更多相关文章
- Java之缓冲流(字节/字符缓冲流)
概述 缓冲流,也叫高效流,是对4个基本的 FileXxx 流的增强,所以也是4个流,按照数据类型分类: 字节缓冲流: BufferedInputStream , BufferedOutputStrea ...
- 《c程序设计语言》读书笔记--统计总的字符数,打印能打印的最多字符
#include <stdio.h> #define MAXLINE 10 int getline(char line[],int maxline); void copy(char to[ ...
- Java IO 流 -- 数据流和对象流 DataOutputStream ObjectOutputStream
DataOutputStream 和 ObjectOutputStream的共同点是: 1.写出后读取 2.读取顺序和写出一致 数据流操作: // 写入 ByteArrayOutputStream b ...
- Java笔记----字节流与字符的常见类型
字节流: InputStream |-- FileInputStream (基本文件流) |-- BufferedInputStream |-- DataInputStream |-- O ...
- Effective java笔记(一),创建与销毁对象
1.考虑用静态工厂方法代替构造器 类的一个实例,通常使用类的公有的构造方法获取.也可以为类提供一个公有的静态工厂方法(不是设计模式中的工厂模式)来返回类的一个实例.例如: //将boolean类型转换 ...
- Java基础知识强化之IO流笔记38:字符流缓冲流之BufferedWriter / BufferedReader使用
1. 字符流缓冲流: 字符流为了高效读写,也提供了对应的字符缓冲流. BufferedWriter:字符缓冲输出流 BufferedReader:字符缓冲输入流 2. BufferedWriter使用 ...
- JAVA基础复习与总结<八> 缓冲流_数据流_对象流_IO总结
缓冲流.数据流以及对象流 一.缓冲流 缓冲流的概念:在读写的时候,对于单字节的读取会造成硬盘的频繁读写,增加访问次数,降低了读取文件的效率.而引入缓冲流之后,就可以将多个字节写入缓冲区,在缓冲区积累之 ...
- Java IO流之对象流
对象流 1.1对象流简介 1.2对象流分类 输入流字节流处理流:ObjectInputStream,将序列化以后的字节存储到本地文件 输出流字节流处理流:ObjectOutputStream 1.3序 ...
- java对象流(二)
对象流,可以将java中的对象转为字节进行输出.将对象写入文件时.文件输出流是将字节写入到文件中. 对象流是将给定的对象转化为一组字节.writeObject()方法就是将对象转为字节. 对象流,读的 ...
随机推荐
- JAVA修饰符优先级先后顺序规范
在实际的开发中,会遇到定义静态常量时,有的人使用的修饰符顺序不一致,例如 ... static final ... 或者 ... final static ... 于是找到了下规范,分享下 优先级 修 ...
- TP5框架下实现数据库的备份功能-tp5er/tp5-databackup
1.安装扩展 方法一: composer require tp5er/tp5-databackup dev-master 方法二 composer.json: "require": ...
- disruptor笔记之一:快速入门
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- jenkins自动构建前端项目(window,vue)
我们把一个多人协作的vue前端项目发布服务器,一般要经过以下步骤: git更新最新的代码 构建项目 把构建后的代码上传到服务器 如果用jenkins来构建的话,只需要点击一次构建按钮,就可以自动完成以 ...
- 谷歌浏览器chrome安装插件报"程序包无效: CRX_HEADER_INVALID"错误
今天参加需求评审,看到原来可以谷歌浏览器查看Axure原型文件,真是只有想不到,没有做不到(自己孤陋寡闻了,第一次接触Axure). 需求评审后,我百度"如何使用谷歌浏览器查看Axure原型 ...
- 使用Postman做接口测试(学生信息的6个接口)
使用postman做接口测试,案例中涉及到接口有:获取学生信息.登录.添加学生信息.学生金币充值.获取所有学生信息.文件上传. 一.获取学生信息(get请求) 请求方式选择:get 直接在访问地址栏中 ...
- 修改为阿里的yum源
如果没有wget,先安装一个.(如果有请蹦过) yum install wget -y 备份本地yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.r ...
- MySQL的本地事务、全局事务、分布式事务
本地事务 事务特性:ACID,其中C一致性是目的,AID是手段. 实现隔离性 写锁:数据加了写锁,其他事务不能写也不能读. 读锁:数据加了读锁,其他事务不能加写锁可以加读锁,可以允许自己升级为写锁. ...
- xmake v2.5.8 发布,新增 Pascal/Swig 程序和 Lua53 运行时支持
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能 ...
- Cobar提出的一种在分库场景下对Order By / Limit 的优化
搜索关注微信公众号"捉虫大师",后端技术分享,架构设计.性能优化.源码阅读.问题排查.踩坑实践. 本文已收录 https://github.com/lkxiaolou/lkxiao ...