day10IO流
-
System.in和System.out分别代表了系统标准的输入和输出设备
-
默认输入设备是:键盘,输出设备是:显示器
-
System.in的类型是InputStream
-
System.out的类型是PrintStream,其是OutputStream的子类FilterOutputStream的子类
-
重定向:通过System类的setIn,setOut方法对默认设备进行改变。
-
public static void setIn(InputStreamin)
-
public static void setOut(PrintStreamout)
-
打印流
-
实现将基本数据类型的数据格式转化为字符串输出
-
打印流:PrintStream和PrintWriter
-
提供了一系列重载的print()和println()方法,用于多种数据类型的输出
-
PrintStream和PrintWriter的输出不会抛出IOException异常
-
PrintStream和PrintWriter有自动flush功能
-
PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用PrintWriter 类。
-
System.out返回的是PrintStream的实例
-
数据流
-
为了方便地操作Java语言的基本数据类型和String的数据,可以使用数据流。
-
数据流有两个类:(用于读取和写出基本数据类型、String类的数据)
-
DataInputStream和DataOutputStream
-
分别“套接”在InputStream和OutputStream子类的流上
-
-
DataInputStream中的方法
boolean readBoolean() byte readByte()
char readChar() float readFloat()
double readDouble() short readShort()
long readLong() int readInt()
String readUTF() void readFully(byte[s] b)
-
DataOutputStream中的方法
-
将上述的方法的read改为相应的write即可。
-
-
ObjectInputStream和OjbectOutputSteam
-
用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。
-
序列化:用ObjectOutputStream类保存基本类型数据或对象的机制
-
反序列化:用ObjectInputStream类读取基本类型数据或对象的机制
-
ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量
-
对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。//当其它程序获取了这种二进制流,就可以恢复成原来的Java对象
-
序列化的好处在于可将任何实现了Serializable接口的对象转化为字节数据,使其在保存和传输时可被还原
-
序列化是RMI(Remote Method Invoke –远程方法调用)过程的参数和返回值都必须实现的机制,而RMI 是JavaEE的基础。因此序列化机制是JavaEE平台的基础
-
如果需要让某个对象支持序列化机制,则必须让对象所属的类及其属性是可序列化的,为了让某个类是可序列化的,该类必须实现如下两个接口之一。否则,会抛出NotSerializableException异常
-
Serializable
-
Externalizable
-
随机存取文件流
-
RandomAccessFile 声明在java.io包下,但直接继承于java.lang.Object类。并且它实现了DataInput、DataOutput这两个接口,也就意味着这个类既可以读也可以写。
-
RandomAccessFile 类支持“随机访问” 的方式,程序可以直接跳到文件的任意地方来读、写文件
-
支持只访问文件的部分内容
-
可以向已存在的文件后追加内容
-
-
RandomAccessFile 对象包含一个记录指针,用以标示当前读写处的位置RandomAccessFile类对象可以自由移动记录指针:
-
long getFilePointer():获取文件记录指针的当前位置
-
void seek(long pos):将文件记录指针定位到pos位置
-
-
构造器
-
public RandomAccessFile(Filefile, Stringmode)
-
public RandomAccessFile(Stringname, Stringmode)
-
-
创建RandomAccessFile类实例需要指定一个mode 参数,该参数指定RandomAccessFile的访问模式:
-
r: 以只读方式打开
-
rw:打开以便读取和写入
-
rwd:打开以便读取和写入;同步文件内容的更新
-
rws:打开以便读取和写入;同步文件内容和元数据的更新
-
-
如果模式为只读r。则不会创建文件,而是会去读取一个已经存在的文件,如果读取的文件不存在则会出现异常。如果模式为rw读写。如果文件不存在则会去创建文件,如果存在则不会创建。
-