`

22、java.io.OutputStream字节输出流

阅读更多

一、OutputStream

 

  1. 此抽象类是表示输出字节流的所有类的超类。
  2. 输出流接受输出字节并将这些字节发送到某个接收器。
  3. 需要定义 OutputStream 子类的应用程序必须始终提供至少一种可写入一个输出字节的方法。
  4. 直接已知子类:
  5.  ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream 
public abstract class OutputStream implements Closeable, Flushable
{
	/**
	 *关闭此输出流并释放与此流有关的所有系统资源。
	 *close 的常规协定是:该方法将关闭输出流。
	 *关闭的流不能执行输出操作,也不能重新打开。 
	 */
	public void close()
           throws IOException{}

	//刷新此输出流并强制写出所有缓冲的输出字节,OutputStream 的 flush 方法不执行任何操作
	public void flush()
           throws IOException{}

	//将 b.length 个字节从指定的 byte 数组写入此输出流。write(b) 的常规协定是:应该与调用 write(b, 0, b.length) 的效果完全相同
        //不用刷新,就直接写入数据了,和字符流不一样
	public void write(byte[] b)
           throws IOException{}

	//将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流
	public void write(byte[] b,
                  int off,
                  int len)
           throws IOException{}

	//将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。 
	public abstract void write(int b)
                    throws IOException;
}

 

二、FileOutputStream

 

  1. 文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。
  2. 文件是否可用或能否可以被创建取决于基础平台。
  3. 特别是某些平台一次只允许一个 FileOutputStream(或其他文件写入对象)打开文件进行写入。
  4. 在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。 
  5. FileOutputStream 用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用 FileWriter
public class FileOutputStream extends OutputStream
{
	//创建一个向指定 File 对象表示的文件中写入数据的文件输出流
	public FileOutputStream(File file)
                 throws FileNotFoundException{}

	//创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处
	public FileOutputStream(File file,
                        boolean append)
                 throws FileNotFoundException{}

	//File file 可以换成 String name
}

 

三、InputStream

 

  1. 此抽象类是表示字节输入流的所有类的超类。
  2. 需要定义 InputStream 子类的应用程序必须总是提供返回下一个输入字节的方法。
  3. 直接已知子类
  4. InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream 
  5. AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, 
public abstract class InputStream implements Closeable
{
	/**
	 *返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。
	 *下一个调用可能是同一个线程,也可能是另一个线程。
	 *一次读取或跳过此估计数个字节不会受阻塞,但读取或跳过的字节数可能小于该数。
	 *注意,有些 InputStream 的实现将返回流中的字节总数,但也有很多实现不会这样做。
	 *试图使用此方法的返回值分配缓冲区,以保存此流所有数据的做法是不正确的
	 */
	public int available()
              throws IOException{}

	/**
	 *从输入流中读取数据的下一个字节。
	 *返回 0 到 255 范围内的 int 字节值。
	 *如果因为已经到达流末尾而没有可用的字节,则返回值 -1。
	 *在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。 
	 */
	public abstract int read()
                  throws IOException;

	//从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
	public int read(byte[] b)
         throws IOException{}

	//将输入流中最多 len 个数据字节读入 byte 数组。
	public int read(byte[] b,
                int off,
                int len)
         throws IOException{}

	//跳过和丢弃此输入流中数据的 n 个字节
	public long skip(long n)
          throws IOException{}
}

 

 

四、FileInputStream

 

  1. FileInputStream 从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。 
  2. FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。
public class FileInputStream extends InputStream
{
	//通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定
	public FileInputStream(File file)
                throws FileNotFoundException{}

	//通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定
	public FileInputStream(String name)
                throws FileNotFoundException{}
}

 

五、示例

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 
 * 需求:拷贝任意文件
 *
 */
public class InputStreamTest {

	public static void main(String[] args) throws IOException {
		String resName = "E:/m.jpg";
		String desName = "c:/m.jpg";
		copy(resName,desName);
		
	}
	public static void copy(String resName,String desName) throws IOException
	{
		FileInputStream fis = new FileInputStream(resName);
		FileOutputStream fos = new FileOutputStream(desName);
		byte[] buf = new byte[1024];
		int num = 0;
		while((num=fis.read(buf))!=-1)
		{
			fos.write(buf);
		}
		fis.close();
		fos.close();
		System.out.println("复制成功");
	}

}

 

六、缓冲区字节流

 

/**
 *该类实现缓冲的输出流。
 *通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。 
 */
public class BufferedOutputStream extends FilterOutputStream
{
	//创建一个新的缓冲输出流,以将数据写入指定的底层输出流
	public BufferedOutputStream(OutputStream out){}

	//创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。
	public BufferedOutputStream(OutputStream out,
                            int size){}
}

 

/**
 *BufferedInputStream 为另一个输入流添加一些功能,
 *即缓冲输入以及支持 mark 和 reset 方法的能力。
 *在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。
 *在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。
 */
public class BufferedInputStream extends FilterInputStream
{
	//创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。创建一个内部缓冲区数组并将其存储在 buf 中。 
	public BufferedInputStream(InputStream in){}

	//创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。创建一个长度为 size 的内部缓冲区数组并将其存储在 buf 中
	public BufferedInputStream(InputStream in,
                           int size){}
}

 

七、示例

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class InputStreamReaderTest {

	public static void main(String[] args) throws IOException {
		BufferedReader br = 
				new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = 
				new BufferedWriter(new OutputStreamWriter(System.out));
		String line = null;
		while((line=br.readLine())!=null)
		{
			if(line.equals("over"))
				break;
			bw.write(line.toUpperCase());
			bw.newLine();
			bw.flush();
		}
		bw.close();
		br.close();
	}
}

 

八、PrintStream

 

  1. PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。
  2. 它还提供其他两项功能。
  3. 与其他输出流不同,PrintStream 永远不会抛出 IOException;
  4. 而是,异常情况仅设置可通过 checkError 方法测试的内部标志。
  5. 另外,为了自动刷新,可以创建一个 PrintStream;
  6. 这意味着可在写入 byte 数组之后自动调用 flush 方法,可调用其中一个 println 方法,或写入一个换行符或字节 ('\n')。 
  7. PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用 PrintWriter 类。 
public class PrintStream extends FilterOutputStream implements Appendable, Closeable
{
	//创建具有指定文件且不带自动行刷新的新打印流
	public PrintStream(File file)
            throws FileNotFoundException{}

	//创建具有指定文件名称和字符集且不带自动行刷新的新打印流
	public PrintStream(File file,
                   String csn)
            throws FileNotFoundException,
                   UnsupportedEncodingException{}

	//创建新的打印流。此流将不会自动刷新
	public PrintStream(OutputStream out){}

	//创建新的打印流
	public PrintStream(OutputStream out,
                   boolean autoFlush){}

	//创建新的打印流
	public PrintStream(OutputStream out,
                   boolean autoFlush,
                   String encoding)
            throws UnsupportedEncodingException{}

	//创建具有指定文件名称且不带自动行刷新的新打印流
	public PrintStream(String fileName)
            throws FileNotFoundException{}

	//创建具有指定文件名称和字符集且不带自动行刷新的新打印流
	public PrintStream(String fileName,
                   String csn)
            throws FileNotFoundException,
                   UnsupportedEncodingException{}

	//打印 boolean,char,double,float,int,long,char[] s,Ojbect obj,String s 值
	public void print(boolean b){}
	public void print(boolean b){}//打印,然后终止该行
}

 

九、示例

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;

public class PrintStreamTest {

	public static void main(String[] args) throws IOException{
		//设置标准输入
		System.setIn(new FileInputStream("E:/m.txt"));
		//设置标准输出
		System.setOut(new PrintStream("C:/m.txt"));
		
		BufferedReader br = 
				new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw =
				new BufferedWriter(new OutputStreamWriter(System.out));
		
		String line = null;
		while((line=br.readLine())!=null)
		{
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		br.close();
		bw.close();
	}
}

 

import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 
 * 将异常信息存入异常文件
 *
 */
public class PrintStreamTest {

	public static void main(String[] args) throws FileNotFoundException{
		try{
			int[] arr = new int[2];
			System.out.println(arr[2]);
		} catch(Exception e){
			System.setOut(new PrintStream("E:/exception.txt"));
			
			Date d = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			String time = sdf.format(d);
			System.out.println(time);
			e.printStackTrace(System.out);
		}
	}
}

 

import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Properties;

/**
 * 
 * 将系统信息存入文件
 *
 */
public class PrintStreamTest {

	public static void main(String[] args) throws FileNotFoundException{
		Properties pro = System.getProperties();
		pro.list(new PrintStream("E:/properties.txt"));
	}
}

 

分享到:
评论

相关推荐

    java.io的基础应用

    在Java中,IO操作主要分为字节流和字符流两大类,分别由`java.io.InputStream`和`java.io.OutputStream`以及`java.io.Reader`和`java.io.Writer`作为基类。字节流处理的是8位的字节,而字符流处理的是16位的Unicode...

    JBuider第八章:Java.io包.rar

    字节流又分为输入流和输出流,例如InputStream和OutputStream是字节输入流和输出流的基类。 2. **基本流类**: - `FileInputStream` 和 `FileOutputStream` 用于读取和写入文件。 - `BufferedInputStream` 和 `...

    使用JAVA.IO流线程的JAVA课设项目万年历记事本

    - Java.IO流库提供了处理输入和输出数据的类,允许程序读取和写入数据到各种源和目的地,如文件、网络连接、内存缓冲区等。 - **输入流**(InputStream)用于读取数据,而**输出流**(OutputStream)用于写入数据...

    java.io的吐血实用例子

    在Java编程语言中,`java.io`包是用于输入/输出(I/O)操作的基础部分,包含了许多类和接口,使得开发者能够处理数据流、字符流、对象序列化、磁盘文件以及网络连接等任务。本篇文章将深入探讨`java.io`包中的关键概念...

    java常用的工具类整理28个

    22. **java.io.BufferedInputStream**和**java.io.BufferedOutputStream**:对字节流进行缓冲,提高性能。 23. **java.net.URL**和**java.net.URLConnection**:处理网络资源的类,可用于下载或上传文件。 24. **...

    Java字节流与字符流的介绍.pdf

    字节流的所有读操作都继承自一个公共超类 java.io.InputStream 类。所有的写操作都继承自一个公共超类 java.io.OutputStream 类。InputStream 和 OutputStream 都是抽象类。InputStream 有 6 个低级输入流: 1. ...

    java 使用IO流实现文件的复制

    这里我们以字节流为例,使用`java.io.FileInputStream`作为读取源文件的输入流,`java.io.FileOutputStream`作为写入目标文件的输出流。 下面是一个简单的文件复制示例: ```java import java.io.*; public class...

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    2、常用21个IO流:FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、FileOutputStream、InputStreamReader、PrintWriter、BufferedReader、InputStream、...

    IO流 javaio java 流

    Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又可以进一步细分为输入流(InputStream/Reader)和输出流(OutputStream/Writer)...

    Java语言程序设计完整版资料.ppt

    总结来说,Java语言程序设计中的文件输入输出是通过一系列的I/O类来实现的,包括字节流和字符流,这些类提供了对不同数据源的读写操作,并且可以通过层次结构和缓冲机制来提高效率和灵活性。在实际编程中,根据需求...

    java字节流和字符流[借鉴].pdf

    Java 的 IO 流系统是基于流的,提供了对数据的读写操作。字节流适用于处理任何类型的数据,而字符流更适合处理字符编码的数据。在进行实际操作时,根据需求选择合适的流类型,并确保在操作完成后关闭流以释放资源。...

    JavaIO的常用方法.docx

    Java IO 流是Java平台提供的一种处理输入输出的机制,其主要目的是为了在程序与外部资源(如磁盘、网络、内存等)之间传输数据。Java IO 包含了大量的类和接口,使得开发者能够方便地进行文件的读写操作。 在Java中...

    流与文件 JAVA文件操作

    字节流包括InputStream和OutputStream(用于输入和输出)以及Reader和Writer(处理字符数据)。字符流在字节流的基础上添加了对字符编码的支持。 在描述中提到的`Aandb.java`可能是一个示例程序,用于将一个文件(A...

    JavaIO流学习资料

    Java IO流的学习是Java开发中不可或缺的部分,它主要用于在程序中处理数据的输入与输出。在Java中,IO流被广泛应用于文件操作、网络通信、数据传输等多个场景。本章节我们将深入探讨Java IO流的基本概念、File类以及...

    一站式学习Java网络编程 全面理解BIO:NIO:AIO1

    java.io 是 Java 中的输入/输出流库,提供了多种流类型,包括字符流和字节流。字符流用于处理文本数据,字节流用于处理二进制数据。 Reader 和 Writer 是 java.io 中的抽象类,提供了基本的读取和写入操作。...

    JavaIO流详解归纳.pdf

    JavaIO流详解归纳 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...

    java7源码-JavaIO:JavaIO

    JavaIO ##JavaIO基础面试题 1. 什么是IO 它是一种数据的流从源头到目的地。比如文件拷贝,输入流和输出流都包括了。输入流是从文件中读取数据到存储到进程(process)中,输出流是从进程中读取数据然后写入到目标文件...

    java io流PPT课件.pptx

    Java IO流是Java编程语言中用于处理输入输出操作的核心组件,尤其在文件操作、设备交互以及数据传输方面扮演着重要角色。在Java中,IO流的概念首次被引入是为了方便数据在不同源和目的地之间流动,它将各种I/O操作...

    java IO类操作

    它涵盖了Java中所有关于输入输出操作的类和接口,包括字节操作流、字符操作流、对象序列化等。Java IO类操作是Java开发中不可或缺的一部分,对于Java开发者来说,理解和掌握Java IO类操作是非常必要的。 在Java IO...

    Java_IO流详解

    Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常基础的部分,在面试当中经常出现。对于初学者而言,IO 部分是容易忽略的内容,求职者一定要掌握该...

Global site tag (gtag.js) - Google Analytics