/*
记住每个类相应的用法
*/
流的分类:
io包内定义了所有的流
分类:
方向:输入流、输出流
处理数据单位:字节流、字符流
功能不同:节点流、处理流

所有流类型,位于java.io包内,分别继承以下四种抽象流类型
InputStream 字节流、输入流
OutputStream 字节流、输出流
Reader 字符流、输入流
Writer 字符流、输出流

节点流:从一个特定的数据源(节点,如文件、内存)读写数据
处理流:“连接”在已存在的流(字节流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。

继承自四个抽象类的类:
InputStream:继承自 InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit)。
继承自 InputStream的类:
节点流:
FileInputStream
PipedInputStream
ByteArrayInputStream
StringBufferInputStream
处理流:
FilerInputStream:
LineNumberInputStream
DataInputStream
BufferedInputStream
PushbackInputStream
SequenceInputStream
ObjectInputStream
InputStream的基本方法:
int read():读取一个字节,并以整数形式返回(0~255),若输出-1则已都导输入流末尾
int read(byte[] buffer) throws IOException
int read(byte[] buffer, int offset, int length) throws IOException
void close()

OutputStream的主要方法:
void flush() throws IOException : 将输出流中缓冲的数据全部写出到目的地

节点流类型
File(文件):
字符流: FileReader FileWriter
// One Class

FileReader fr = new FileReader("d:\\test.java");
c = fr.read(); // 读取一个字符
system.out.println((char)c);

// One Class

FileWriter fw = new FileWriter("d:\\test2.dat");
int c = 0;
fw.writer(c);

字节流: FileInputStream FileOutputStream
Memory Array
字符流: CharArrayReader CharArrayWriter
字节流: ByteArrayInputStream ByteArrayOutputStream
Memory String
字符流: StringReader StringWriter
Pipe:
字符流: PipedReader PipedWriter
字节流: PipedInputStre am PipedOutputStream
凡是Reader或者Writer都是字符,Stream都是字节

处理流类型:包在别的流上的流
Buffering(缓冲流):显著减少对IO读写的次数,保护硬盘
字符流: BufferedReader BufferedWriter
FileInputStream fis = new FileInputStream("d:\\test3.java");
BufferedInputStream bis = new BufferedInputStream(fis);
system.out.println(bis.read());
字节流:BufferInputStream BufferedOutputStream
Coverting between bytes and character(转换流):字节流转换为字符流
字符流:InputStreamReader OutputStreamWriter
// One Case

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d:test4.txt"));
osw.writer("asdsddeeffdgd"); 06-06

// One Case

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr); // br 这个对象有readLine() 方法,这个方法比较好用
String s = br.readLine(); // br.readLine() 这个方法阻塞等待前端输入数据
System.out.println(s);

Data conversion
字节流: DataInputStream DataOutputStream 提供了可以存取与机器无关的Java原始类型数据(int/double等)的方法,直接将数据以原始数
据类型存入存储设备,而且是UTF-8的,省空间。
构造方法分别为 DataInputStream(InputStream in)和 DataOutputStream(OutputStream out)
// One Case

ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeDouble(Math.random()); // 先写入8个字节
dos.writeBoolean(true); // 再写入一个字节
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
DataInputStream dis = new DataInputStream(bais);
System.out.println(dis.readDouble()); // 先写进去的先读出来
System.out.println(dis.readBoolean()); // 后写进去的后读出来
dos.close; dis.close;

Print流
PrintWriter和PrintStream都属于输出流,分别针对字符和字节
PrintWriter和PrintStream提供了重载的print
println()方法用于多种数据类型的输出。
PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息
PrintWriter和PrintStream有自动flush功能。

// One Case

FileOutputStream fos = new FileOutputStream("d:\\test5.txt");
PrintStream ps = new PrintStream(fos);
if(ps != null){
System.setOut(ps); // 设置内容输出的位置,默认为屏幕
}
System.out.print("asdads");

// One Case

// 打印日志
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
FileWriter fw = new FileWriter("d:\\logFile.log", true); // 加 true是为了每次写入时在原来数据的后面写入,而不覆盖原来的日志
PrintWriter log = new PrintWriter(fw);
log.println("-------");
log.println("today's log");
log.fulsh
log.println("====" + new Date() + "====");
log.close();

Object Serialization:把整个Object 写入存储设备。(序列化:一个Object直接写到硬盘上)
字节流:ObjectInputStream ObjectOutputStream
// One Case 序列化地保存一个对象的属性

class T implements Serializable    // Serializable 为序列化标记接口,不包含任何方法,标记给编译器看
{
int i = 10;
int j = 9;
double d = 2.3;
int k = 15;
} T t = new T();
t.k = 8;
FileOutputStream fos = new FileOutputStream("d:/test6.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(t);
oos.flush();
oos.close(); FileInputStream fis = new FileInputStream("d:/test6.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
T tReaded = (T)ois.readObject();
System.out.println(tReaded.i + " " + tReaded.j + " " + tReaded.d + " " + tReaded.k);

transient 关键字(透明的)某个属性是透明的,序列化的时候不予考虑,该属性对应的值为默认值。

Byte Streams
程序使用8-bit 字节的比特流执行输入输出
文件I/O byte流:FileInputStream/FileOutputStream

Always Close Streams

public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally { // 关闭一个流
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}

FileReader/FileWriter

Java I/O Basic的更多相关文章

  1. Java fundamentals of basic IO

    IO is a problem difficult to handle in various of systems because it  always becomes a bottleneck in ...

  2. java实现HTTP Basic认证

    这两天一直在调试EMQ的API,通过HTTP的GET请求,可以查询到订阅列表信息,在浏览器中测试时,需要输入用户名和密码,然后才能显示出结果,输错或者不输入会返回401错误. 通过浏览器输入用户名和密 ...

  3. java 发送带Basic Auth认证的http post请求实例代码

    构造http header private static final String URL = "url"; private static final String APP_KEY ...

  4. java 发送带Basic Auth认证的http post请求

    构造http header private static final String URL = "url"; private static final String APP_KEY ...

  5. [JavaEE] Testing the Java EE Application : Basic Arquillian integration test

    We have model like this: package com.pluralsight.bookstore.model; import javax.persistence.*; import ...

  6. 【JAVA】【Basic】MacOS上搭建JAVA开发环境

    1. JRE 1.1. 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html 1.1.1. dmg格式安装: ...

  7. 【JAVA】【Basic】概念

    1. 历史 1.1. Sun, Green Project, 90年代初,为机顶盒提供一个统一的语言层,oak-->Java, James Gosling, Sun World 1995:JAV ...

  8. Flink Program Guide (1) -- 基本API概念(Basic API Concepts -- For Java)

    false false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-n ...

  9. Java资源大全中文版(Awesome最新版)

    Awesome系列的Java资源整理.awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具.数据库.框架.模板.安全.代码分析.日志.第三方库.书籍.Java 站 ...

随机推荐

  1. 智能车学习(二)—— GPIO学习

    一.概述 使用的是蓝宇的底层,主要有初始化管脚,设置管脚状态,反转管脚状态等. 二.代码重述: 1.头文件gpio.h #ifndef GPIO_H //防止重复定义(gpio_H 开头) #defi ...

  2. 循环冗余检验算法CRC

    http://blog.csdn.net/liyuanbhu/article/details/7882789 首先要了解多项式乘法,除法 了解模2运算的含义,多项式除法后合并同类项时..系数%2处理 ...

  3. 【SQL Sever】实现SQL Sever的发布。订阅。 双机热备

    实现SQL Sever的发布和订阅  最大的好处就是: 可以实现读写分离,增删改操作在主数据库服务器上进行,查询在备份数据库服务器上进行.一方面提高软件执行效率,另一方面也减轻主库压力. 本次实现发布 ...

  4. nefu 197 KMP

    Description 在信息检索系统中一个很重要的环节就是关键字符串的查找,从而很多对自己有用的信息.给你一个很长的一段文字, 和一个关键信息字符串,现在要你判断这段文字里面是否有关键字符串. In ...

  5. Angular JS 学习之简介

    1.Angular JS是一个JavaScript框架,它是一个以JavaScript编写的库,它可以通过<script>标签添加到HTML页面: <script src=" ...

  6. JQuery学习之其他

    1.noConflict()方法:释放会$标识符的控制,这样其他也用$的脚本就可以使用它了 **全名代替简写的方法使用jQuery $.noConflict(); jQuery(document).r ...

  7. 如何用distinct消除重复记录的同时又能选取多个字段值?

    http://www.cnblogs.com/warioland/archive/2012/05/30/2526128.html

  8. git merge 与 rebase 的区别

    http://gitbook.liuhui998.com/4_2.html merge rebase

  9. 差分约束系统 POJ 3169 Layout

    题目传送门 题意:有两种关系,n牛按照序号排列,A1到B1的距离不超过C1, A2到B2的距离不小于C2,问1到n的距离最大是多少.如果无限的话是-2, 如果无解是-1 分析:第一种可以写这样的方程: ...

  10. oracle查看表实际物理空间使用大小

    http://www.2cto.com/database/201107/95313.html 一种是分配给一个表的物理空间数量,而不管空间是否被使用.可以这样查询获得字节数:select segmen ...