本篇文章将简单介绍JAVA所提供的转换流 数据流 print流 object流
1、转换流
转换流的主要作用是将一个文件从字节流转换为字符流,原来是按照一个字节一个字节的读取,在使用转换流之后就变为一个字符一个字符的进行读取。
public static void main(String[] args) {
try {
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("d:\\char.txt"));
osw.write("mircosoftibmsunapplehp");
System.out.println(osw.getEncoding());
osw.close();
osw = new OutputStreamWriter(
new FileOutputStream("d:\\char.txt", true),"ISO8859_1");
osw.write("mircosoftibmsunapplehp");
System.out.println(osw.getEncoding());
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = null;
try {
s = br.readLine();
while(s!=null){
if(s.equalsIgnoreCase("exit")) break;
System.out.println(s.toUpperCase());
s = br.readLine();
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
2、数据流
数据流是指:DataInputStream和DataOutputStrealu分别继承自InputSteam和OutputStream,它属于处理流,需要分别,"套接"在InputStream和OutputStream类型的节点流上。
DataInputStream和DataOutputStream提供了可以存取与机器无关的Java原始类型数据(如:Int,double等)的方法。可以将JAVA原始的数据类型直接写入到文件当中。
public static void main(String[] args) {
ByteArrayOutputStream baos = new ByteArrayOutputStream(); //自动建立一个字节数组,同时套接上一个DataOutputStream
DataOutputStream dos = new DataOutputStream(baos);
try {
dos.writeDouble(Math.random());//写入一些随机数
dos.writeBoolean(true);//写入一个布尔类型的true
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());//转换为字节数组
System.out.println(bais.available());//输出有效地可攻读取得所有字节一个布尔类型一个double类型一共占据了9个字节的空间。所以输出9
DataInputStream dis = new DataInputStream(bais);//在dis外面在套接一层DataInputStream
System.out.println(dis.readDouble());
System.out.println(dis.readBoolean());
dos.close(); dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
先在内存当中分配一个字节数组,并在外边套接上3种处理流。并且按照不同的数据类型,将在内存中分配不同的内存空间,并且要遵循先写进的先读出来,比如像写入的是一个int类型的字节,第二次写入double 类型。如果第一次先读double则会读8个字节的内容,会导致读取的混乱。
3、print流
流如其名,print流就是打印东西的一个流,但print流不会抛出异常。
public static void main(String[] args) {
String s = null;
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));//将键盘的标准输入外面套一个处理流
try {
FileWriter fw = new FileWriter
("d:\\logfile.log", true); //ture代表追加到文件的后面,作为日志的记录
PrintWriter log = new PrintWriter(fw);
while ((s = br.readLine())!=null) {
if(s.equalsIgnoreCase("exit")) break;
System.out.println(s.toUpperCase());
log.println("-----");
log.println(s.toUpperCase());
log.flush();//情空缓冲区
}
log.println("==="+new Date()+"==="); //date代表的是时间
log.flush();//情空缓冲区
log.close();//关闭连接
} catch (IOException e) {
e.printStackTrace();
}
}
这个DEMO的主要的作用是:将键盘中输入的内容进行输出,直到碰到输入到EXIT输入停止。并且将所有输入的操作记录记录到d:\\logfile.log文件当中,并且记录下操作的时间,并记录下来输入的内容。
4、object流
public static void main(String args[]) throws Exception {
T t = new T();
t.k = 8;
FileOutputStream fos = new FileOutputStream("d:/testobjectio.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);//用来专门写Object类
oos.writeObject(t);//将T写进去
oos.flush();
oos.close();
FileInputStream fis = new FileInputStream("d:/testobjectio.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
T tReaded = (T)ois.readObject();
System.out.println(tReaded.i + " " + tReaded.j + " " + tReaded.d + " " + tReaded.k);
}
class T implements Serializable//可以被序列化的,Serializable属于标记型接口,是一个空接口
{
int i = 10;
int j = 9;
double d = 2.3;
transient int k = 15;
}
将一个T类型写入到文件中去,可以将一个Object当成一个整体读入进去,并且改变类T中k的值。最后将这个类打印出来。