java 中的流 .

java中有很多种流,可以分为节点流,处理流,也可以分为字节流,字符流

基本的节点流如下:InputStream,OutputStream,FileInputStream,FileOutputStream,Reader,Writer,FileReader,FilerWriter

处理流如下:BufferedInputStream,BufferedOutputStream,OutputStreamReader,OutputStreamWriter,DataOutputStream,DataInputStream,ObjectInputStream,ObjectOutputStream

ByteArrayInputStream,ByteArrayOutputStream等

以上只是列举了一些比较常用的,如果要详细了解,可以查看jdk的API文档

IO又分两种流

字节流 InputStream OutputStream

字符流 Reader Writer

他们都是抽象类

具体实现
字节流 FileInputStream FileOutputStream
字符流 FileReader FileWriter


字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.
所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。



字节流转换成字符流可以用 InputSteamReader OutputStreamWriter

转换成BufferdReader BufferedWriter 他们具有缓冲区


下面是关于上面流写的一些例子,用作参考

public class FileInputStreamTest {

/**
* @param args
*/
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
// fileInputStream();
// fileWrite();
// bufferWriter();
// ouputStreamWriter();
// dataInputStream();
objectOutputStream();

}


private static void objectOutputStream() throws IOException,
FileNotFoundException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("c:/data.dat"));
SerializableClazz clazz = new SerializableClazz(10,"test",1.023);
oos.writeObject(clazz);
oos.flush();
oos.close();
}


private static void dataInputStream() throws FileNotFoundException,
IOException, UnsupportedEncodingException {
DataOutputStream dos = new DataOutputStream(new FileOutputStream("c:/test.txt"));
dos.writeFloat(new Float(0.123456));
dos.writeBoolean(true);
dos.writeChars("这是一个测试");
dos.flush();
dos.close();

DataInputStream dis = new DataInputStream(new FileInputStream("c:/test.txt"));
System.out.println(dis.readFloat());
System.out.println(dis.readBoolean());
dis.close();
}


private static void ouputStreamWriter() throws FileNotFoundException,
IOException {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("c:/test.txt",true),"gbk");
System.out.println(osw.getEncoding());
osw.write("这是一个测试用例,用来测试 outputstreamwriter" +
"アリババは、仕入れたい商材の调达、问屋を探せる卸サイトです");
osw.flush();
osw.close();
}

private static void bufferWriter() throws IOException {
//字符流,处理流
BufferedWriter bw = new BufferedWriter(new FileWriter("c:/test.txt"));
for(int i =0 ; i<100; i++)
{
// bw.write(String.valueOf(Math.random()));
bw.write(String.valueOf(new Random().nextInt(10)));
bw.newLine();
}
bw.close();
}

private static void fileWrite() throws IOException {
//字符流,节点流
FileWriter fw = new FileWriter("c:/test.txt");
for(int i= 0 ; i< 5000; i++)
{
fw.write("baike.baidu.com/view/1882862.htm");
}
fw.flush();
fw.close();
}

private static void fileInputStream() throws FileNotFoundException,
IOException, UnsupportedEncodingException {
//字节流,节点流
FileInputStream fi = new FileInputStream("c:/a.txt");
StringBuilder str = new StringBuilder();
byte[] buffer = new byte[1024];
int b = 0;
while((b = fi.read(buffer)) != -1)
{
str.append(new String(buffer , "gb2312"));
}
fi.close();
System.out.println(str.toString());
}
}



/*

此处定义了一个类,并继承了serializable接口,主要的作用是使对象可序列化,

使用objectouputstream保存到本地或进行网络传输

*/

class SerializableClazz implements Serializable{
private int i;
private String str;
transient private double d;// 序列化时不予考虑
public SerializableClazz(){}
public SerializableClazz(int i,String str , double d){
this.i = i;
this.str = str;
this.d = d;
}
public SerializableClazz getInstance(){
return new SerializableClazz();
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值