InputStream和OutputStream

在java.io包中提供了60多个类(流)。

(1)从功能上分为两大类:输入流和输出流。

(2)从流结构上可分为字节流和字符流。 

字节流类(Byte Streams)字节流类用于向字节流读写8位二进制的字节。一般地,字节流类主要用于读写诸如图像或声音等的二进制数据。

字符流类(Character Streams)字符流类用于向字符流读写16位二进制字符。

(3)节点流:从特定的地方读写的流类,例如:磁盘一块内存区域。(即与目标直接打交道的流

常使用的节点流有:

FileInputStream、FileOutputStream

ByteArrayInputStream、ByteArrayOutputStream

过滤流:使用节点流作为输入或输出,过滤流是使用一个已经存在的输入流或输出流链接创建的。(它不能与目标直接打交道

1.FileInputStream的使用

package com.sailang.java;

import java.io.FileInputStream;
import java.io.InputStream;

public class InputStreamTest
{

	public static void main(String[] args) throws Exception
	{
		//打开流
		InputStream is = new FileInputStream("D:/lizhongyi.txt");
		//读取流
		byte[] buffer = new byte[200];
		int length = 0;
		
		while(-1 != (length = is.read(buffer, 0, 200)))
		{
			String s = new String(buffer, 0, length);
			System.out.println(s);
		}
		//关闭流
		is.close();
	}
}

结果:

32
lizhongyi
gengtao
xunliceng
a

问题:

(1)读了几次?

(2)怎么读取换行符的?

 

2.FileOutputStream的使用

package com.sailang.java;

import java.io.FileOutputStream;
import java.io.OutputStream;

public class OutputStreamTest1
{
	public static void main(String[] args) throws Exception
	{
		//打开要写入的流文件
		OutputStream os = new FileOutputStream("D:/out.txt");
		
		String str = "Hello World";
		byte[] buffer = str.getBytes();
		//将buffer写入到输出流中
		os.write(buffer);
		
	    //关闭流
		os.close();
	}
}

3、过滤流BufferedOutputStream类的使用

package com.sailang.java;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class BufferedOutputStreamTest
{
	public static void main(String[] args) throws Exception
	{
		//打开需要写入的文件流
		OutputStream os = new FileOutputStream("D:/lizhongyi.txt");
		//过滤流封装
		BufferedOutputStream bos = new BufferedOutputStream(os);
		
		//写入数据
		String str = "lizhongyi";
		bos.write(str.getBytes());
		
		//关闭文件流
		bos.close();
	}
}

4、ByteArrayInputStream

ByteArrayInputStream把字节数组当作源,将内存的缓存区当作InputStream使用。

package com.sailang.java;

import java.io.ByteArrayInputStream;
import java.io.IOException;

public class ByteArrayInputStreamTest
{
	public static void main(String[] args) throws IOException
	{
		//打开输入流
		//数据源
		String str = "lizhogyi";
		byte[] b = str.getBytes();
		//将字节数组作为源的输入流
		ByteArrayInputStream f = new ByteArrayInputStream(b);
		
		//读入数据,一个字节一个字节的读,每个返回的字节占用int的最后8位,读到末尾返回-1
		int a;
		while(-1 != (a = f.read()))
		{
			System.out.println((char)a);
		}
		
		//关闭流
		//Closing a ByteArrayInputStream has no effect. 
		//The methods in this class can be called after the stream has been closed without generating an IOException.
		//f.close();
	}
}

5、ByteArrayoutputStream

package com.sailang.java;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class ByteArrayOutputStreamTest
{
	public static void main(String[] args) throws Exception
	{
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		
		String str = "lizhongyiddddd";
		
		byte[] buffer = str.getBytes();
		
		baos.write(buffer);
		
		OutputStream os = new FileOutputStream("D:/out.txt");
		
		baos.writeTo(os);
		
		baos.close();
		os.close();
	}
}


 

你可能感兴趣的:(InputStream和OutputStream)