`

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.Reader 和 java.io.InputStream 的区别

    `java.io.Reader`和`java.io.InputStream`是Java标准库中处理输入数据的核心类,它们分别针对字符流和字节流提供了基础的支持。 #### `java.io.Reader`:字符流的读取器 `java.io.Reader`是所有字符输入流的超类。...

    Java.nio 与Java.io比较

    在Java.io中,程序通过输入流读取来自源的数据,而通过输出流写入并发送数据到目的地。字节流是最基本的流类型,所有字节流类都继承自`InputStream`和`OutputStream`。 #### 关于InputStream和OutputStream 进行...

    java.io的基础应用

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

    JavaIO字节输出流的总结共6页.pdf.zip

    Java IO字节输出流是Java平台中用于处理数据输出的核心部分,它允许程序将字节数据写入到各种目标,如文件、网络连接或者内存缓冲区。在Java中,字节输出流通常与字节输入流配合使用,完成数据的读取和写入操作。...

    JBuider第八章:Java.io包.rar

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

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

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

    java.io详解

    根据处理的数据类型不同,Java IO流被分为两大类:字节流(byte streams)和字符流(character streams)。字节流主要处理二进制数据,而字符流则专门用于处理文本数据。 #### 二、Java IO流分类 ##### 字节流 - ...

    java.io的吐血实用例子

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

    Java-IO流.pdf

    对于字节流,`java.io.InputStream`是所有字节输入流的基类,而`java.io.OutputStream`则是所有字节输出流的基类。同样,`java.io.Reader`代表字符输入流,`java.io.Writer`代表字符输出流。值得注意的是,这四个类...

    Java中的字节流.

    ### Java中的字节流 #### 一、字节流简介 在Java中,字节流是一种处理二进制数据的基本方式。它通过一系列类来实现数据的读取和写入功能,这些类主要继承自`InputStream`和`OutputStream`两个抽象类。字节流非常...

    java 输入输出流

    Java中字节流分为两类:输入字节流(InputStream)和输出字节流(OutputStream)。InputStream的基类是`java.io.InputStream`,OutputStream的基类是`java.io.OutputStream`。例如,`FileInputStream`用于从文件中...

    将输出流OutputStream转化为输入流InputStream的方法

    在Java中,它们是Java.io包下的基础类,提供了多种子类来处理不同类型的输出和输入操作,如`FileOutputStream`和`FileInputStream`用于文件操作,`SocketOutputStream`和`SocketInputStream`用于网络通信等。...

    java常用的工具类整理28个

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

    Java学习IO流小结--字符流

    IO流是Java语言中处理输入/输出的重要工具,它包括字节流和字符流两大类。本文将重点讨论字符流的相关概念及其用法。 #### 字符流简介 字符流主要用来处理文本数据,它是以字符为单位进行读写的流。字符流分为字符...

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

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

    java IO 类层次图

    Java IO中的字节流类主要分为两大类:`InputStream`和`OutputStream`。它们是所有字节流类的基类,其他具体子类都直接或间接地继承自这两个类。 - **InputStream 类** - `ByteArrayInputStream`: 提供了一个从...

    Java IO字符流和字节流

    ### Java IO字符流和字节流详解 #### 一、引言 在Java编程中,输入输出(简称IO)操作是十分重要的一个方面。通过IO操作,我们可以读取文件、网络数据、用户输入等,也可以将数据写入到文件、网络、控制台等。Java...

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

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

    Java-Io流,练习

    1. 字节流:Java的`java.io`包中提供了处理字节流的类,如`InputStream`和`OutputStream`作为所有字节输入流和输出流的基类。它们的子类如`FileInputStream`和`FileOutputStream`分别用于文件的读写。 2. 字符流:...

Global site tag (gtag.js) - Google Analytics