java IO流学习笔记一

来源:互联网 发布:ov7670 linux源码 编辑:程序博客网 时间:2024/05/17 20:42
IO 两大主流 16位和8位
 


 16位对应writer和reader

    fileWriter /fileReader  对文件进行读写

       示例代码:

      FileWriter out=new FileWriter("test.txt");
out.write("张三");
out.close();


char[] buf=new char[1024];

FileReader in=new FileReader("test.txt");
int len=in.read(buf);
System.out.println(new String(buf,0,len));

    StringWriter/StringReader 对内存里的位置进行读写

             示例代码如下:

                try {
throw new Exception("test");
} catch (Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
System.out.println(e.getMessage());
// System.out.println(sw.toString());
}

    PipedWriter/PipedReader     两个线程间进行通讯




 8位对应InputStream和OutputStream


    fileInputStream/FileOutputStream   对文件进行读写

         示例代码:

          public static void main(String[] args) throws Exception
{
FileOutputStream out=new FileOutputStream("test.txt");
out.write("张三".getBytes());

byte[] buf=new byte[1024];
File f=new File("test.txt");
FileInputStream in=new FileInputStream(f);
int len=in.read(buf);
System.out.println(new String(buf,0,len));
in.close();






}

 

    ByteArrayInputStream/ByteArrayOutputStream    对字节数组进行读写

          示例代码:

               public static void main(String[] args)
{
String tmp="abc";
byte[] src=tmp.getBytes();
ByteArrayInputStream input=new ByteArrayInputStream(src);
ByteArrayOutputStream output=new ByteArrayOutputStream();
transform(input,output);
byte[] result=output.toByteArray();
System.out.println(new String(result));

transform(System.in,System.out);

}
public static void transform(InputStream in,OutputStream out)
{
int ch=0;
try
{
while((ch=in.read())!=-1)
{
int upperCh=(int)(Character.toUpperCase((char)ch));
out.write(upperCh);
}
}catch(Exception e)
{
e.printStackTrace();
}
}


    PipedInputStream/PipOutputStream    线程间通讯使用

       示例代码:

class Sender extends Thread {
private PipedOutputStream out = new PipedOutputStream();


public PipedOutputStream getOutputStream() {
return out;
}


public void run() {
String strInfo = new String("hello,receiver!");
try {
out.write(strInfo.getBytes());
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}


}


class Receiver extends Thread {
private PipedInputStream in = new PipedInputStream();


public PipedInputStream getInputStream() {
return in;
}


public void run() {
String strInfo = new String("hello,receiver!");
byte[] buf = new byte[1024];


try {
int len = in.read(buf);
System.out.println("the following message comes from sender:\n" + new String(buf, 0, len));
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}


}


class PipedStreamTest {
public static void main(String[] args) throws Exception {
Sender t1 = new Sender();
Receiver t2 = new Receiver();


PipedOutputStream out = t1.getOutputStream();
PipedInputStream in = t2.getInputStream();
out.connect(in);


t1.start();
t2.start();
}


}

 
    注:数据流中不存在字符串的IO操作,那样要用reader和writer
       二者的桥梁在inputStreamReader/outputStreamWriter
                   bufferedWriter/bufferedReader

                   bufferedInputStream/bufferedOutputStream

       示例代码:

                           public static void main(String[] args) throws Exception
{
FileOutputStream fos=new FileOutputStream("count.txt");
BufferedOutputStream bos=new BufferedOutputStream(fos);
DataOutputStream dos=new DataOutputStream(bos);
dos.writeUTF("ab中国");
dos.writeBytes("ab中国");
dos.writeChars("ab中国");
dos.close();


FileInputStream fis=new FileInputStream("count.txt");
BufferedInputStream bis=new BufferedInputStream(fis);
DataInputStream dis=new DataInputStream(bis);
System.out.println(dis.readUTF());
byte[] buf=new byte[1024];
int len=dis.read(buf);
System.out.println(new String(buf,0,len));
fis.close();

}


       来提高IO访问速度的
     


高级IO操作
 
  信道IO  java.nio.channels
 


java流的处理上分为
   字符流 处理单元为2个字节的unicode字符,操作字符\字符数组\字符串
Reader
         CharArrayReader()
         StringArrayReader()
         FileReader()
          


        Writer
         CharArrayWriter()
         StringWriter()
         FileWriter()
         PipedWriter()


       




   
   字节流 处理一个字节,操作字节和字节数组
         inputStream
           ByteArrayInputStream() 创建一个字节数组输入流
           StringBufferInputStream() 把一个String  作为一个inputStream
           FileInputStream()  把一个文件作为一个inputStream,实现文件读取
           PipInputStream()   创建一个输入流管道
  SequenceInputStream() 序列输入流,把多个inputStream合并


         outputStream
           ByteArrayOutputStream() 把信息存入内存中的一个缓冲区
           FileOutputStream ()
           PipedOutputStream() 通讯管道的发送端


           
 两种不同导向的stream之间的转换
    把一个字节为导向的stream转换为一个以字符为导向的stream
 




java IO的一般使用原则
   1 按数据来源(去向)分类
        是文件:   fileInputStream, fileOutputStream, fileReader, fileWriter
是byte[]:  byteArrayInputStream/byteArrayOutputStream
        是char[]:  charArrayReader/charArrayWriter
        是String stringBufferInputStream/StringBufferOutputStream
                 StringReader/StringWriter
        网络数据流: inputStream/outputStream  reader  writer




   2 按是否格式化输出分:
        printStream /printWriter
    
   3 按是否要缓冲分:
      bufferedInputStream/bufferedOutputStream
      bufferedReader/burreredWriter
   
   4 按数据格式分
原创粉丝点击