`

I/O 2:JAVA IO详解(流类)

    博客分类:
  • I/O
 
阅读更多

f

 

package com.test.Algorithm;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class FileTest10 {
	//上面提到读数据的步骤为:1,打开一个流。2,判断是否还有数据,并读取数据。3,关闭流。
	public static void main(String[] args) throws IOException {
		//打开流
		FileInputStream fis = new FileInputStream(new File("C:/优秀.txt"));
		byte[] buffer = new byte[200];
		int length = 0;
		//判断是否有更多数据,当没有时,返回-1。
		//上面定义了一个200长度的字节数据,如果test.txt中有500字节长度的数据。
		//那么它会循环4次,lenght的长度分别是200,200,100,-1
		while (-1 != (length = fis.read(buffer, 0, 200))) {
			String s = new String(buffer, 0, length);
			System.out.println(s);
		}
		fis.close();
	}

}

 

InputStream子类中FilterInputStream是过滤流,其它是节点流。

 

以下程序简单演示了FileOutputStream的用法

package com.test.Algorithm;

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

public class FileTest9 {
	public static void main(String[] args) throws IOException {
		FileOutputStream os = new FileOutputStream("d:/test.txt");
		String str = "hello world";
		byte[] buffer = str.getBytes();
		os.write(buffer);
		os.close();
	}
}

其中FileOutputStream有一个构造函数

FileOutputStream(File file, boolean append) 

参数append表示内容是否追加

 

package com.test.Algorithm;

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

public class FileTest9 {
	public static void main(String[] args) throws IOException {
		ByteArrayOutputStream f = new ByteArrayOutputStream();
		String str = "hello world";
		byte[] buffer = str.getBytes();
		f.write(buffer);
		byte[] result = f.toByteArray();
		for (int i = 0; i < result.length; i++) {
			System.out.println((char) result[i]);
		}
		OutputStream os = new FileOutputStream("text.txt");
		f.writeTo(os);
		f.close();
		os.close();
	}
}

 

 

 

package com.test.Algorithm;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class FileTest9 {
	public static void main(String[] args) throws IOException {
		DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(
				new FileOutputStream("a.txt")));
		byte b = 3;
		int i =12;
		char ch ='a';
		float f = 3.3f;
		dos.writeByte(b);
		dos.writeInt(i);
		dos.writeChar(ch);
		dos.writeFloat(f);
		dos.close();
		
		DataInputStream dis = new DataInputStream(new BufferedInputStream(
				new FileInputStream("a.txt")));
		//读与写的顺序要保持一致
		System.out.println(dis.readByte());
		System.out.println(dis.readInt());
		System.out.println(dis.readChar());
		System.out.println(dis.readFloat());
		dis.close();
	}
}

 

package com.test.Algorithm;

import java.io.IOException;
import java.io.InputStream;

public class MyByteArrayInputStream extends InputStream{
	
	protected byte[] data;
	protected int position = 0;
	
	public MyByteArrayInputStream(byte[] b){
		this.data = b;
	}
	
	public int read() throws IOException {
		return (position < data.length) ? (data[position++]) : -1;
	}
	
	public static void main(String[] args) {
		byte[] b = new byte[16];
		for (int i = 0; i < b.length; i++) {
			b[i] = (byte)i;
		}
		MyByteArrayInputStream mbais = new MyByteArrayInputStream(b);
		while(true){
			try {
				int c = mbais.read();
				if(c < 0){
					break;
				}
				System.out.println(c + "  ");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

 

 

package com.test.Algorithm;

import java.io.IOException;
import java.io.InputStream;

public class MyOwnStream extends InputStream{
	protected byte[] data;
	protected int position = 0;
	protected int mark =0;
	public MyOwnStream(byte[] b){
		this.data = b;
	}
	public int read() throws IOException {
		return (position < data.length) ? (data[position++]) : -1;
	}
	//返回仍可读取的字节长度
	public int available() throws IOException {
		return data.length - position;
	}
	
	public void close() throws IOException {
		position = data.length;
	}
	//设置流中的标识位
	public synchronized void mark(int readlimit) {
		this.mark = readlimit;
	}
	//将缓冲流复位到标识位置
	public synchronized void reset() throws IOException {
		if(mark <0 || mark >= data.length){
			throw new IOException("the position is not valid");
		}
		position = mark;
	}
	
	public boolean markSupported() {
		return true;
	}
	
	public int read(byte[] b, int off, int len) throws IOException {
		if(this.position > data.length || len < 0){
			return -1;
		}
		if((this.position + len) > data.length){
			len = data.length - this.position;
		}
		//如果只读0个,就直接返回0
		if(len == 0){
			return 0;
		}
		System.arraycopy(data, position, b, off, len);
		position +=len;
		return len;
	}
	
}

 

学IO最重要的是深刻理解装饰模式!

分享到:
评论

相关推荐

    Java I/O层次结构详解

    Java I/O层次结构详解 Java I/O系统是Java平台中不可或缺的一部分,它为开发者提供了处理输入和输出的强大工具。在Java中,I/O操作主要基于流(Stream)的概念,流可以被视为数据的有序序列,既可以代表从源读取...

    java流IO总结

    Java I/O系统是Java编程的重要组成部分,通过掌握不同的流类及其使用方法,可以有效地处理文件读写、网络通信等常见的输入输出操作。了解I/O流的基本概念、分类以及常用的类和接口,可以帮助开发者更好地理解和使用...

    javaio详解【2】.pdf

    Java的IO体系分为字节流和字符流两大类,每种流又有输入流和输出流的对应。 字节流是最基础的IO流,处理单元为1个字节,主要包括`InputStream`和`OutputStream`两个抽象基类。例如,`FileInputStream`和`...

    java_I/O流的教程

    2. **字节流与字符流**:Java的I/O流分为字节流和字符流两大类。字节流处理原始的8位字节数据,如`FileInputStream`和`FileOutputStream`,适用于处理任何类型的数据。而字符流如`FileReader`和`FileWriter`则基于...

    Java软件开发实战 Java基础与案例开发详解 13-2 Java IO原理 共4页.pdf

    Java I/O体系结构主要分为两大类:字节流和字符流。每种流又可以根据数据流向分为输入流和输出流。 - **字节流**:处理8位字节的数据。 - **字符流**:处理16位Unicode字符。 #### 4. I/O流的创建 在Java程序中,...

    新版Java_IO精讲(推荐版)

    Java I/O的相关类主要位于`java.io`包中,该包提供了丰富的API来支持各种I/O操作: - **通用类**:如`File`、`ObjectInputStream`等。 - **过滤器/缓冲流**:例如`BufferedInputStream`、`BufferedOutputStream`等...

    java_io流的处理

    Java的`java.io`包提供了多种字节流类,包括: - `InputStream`: 基本输入流类,用于读取数据。 - `OutputStream`: 基本输出流类,用于写入数据。 - `FileInputStream`和`FileOutputStream`: 用于从文件读取和向...

    java jdk io包类详解

    ### Java JDK IO包类详解 #### 概述 Java平台提供的`io`包为开发者提供了访问文件系统、对象序列化等功能的基本输入输出能力。它主要包括字节流、字符流及对象流(字节流的包装类)。此外,还提供了一些基本的文件...

    最新Java 编程详解

    7. **Java I/O与NIO**:从传统的I/O模型到非阻塞I/O模型(New IO,即NIO),包括Channels、Buffers和Selectors的使用。 8. **反射API**:Java反射允许在运行时检查类、接口、字段和方法的信息,动态创建对象并调用...

    java io 详解

    ### Java IO 详解 #### 一、Java IO体系概述 Java IO(Input/Output)是Java编程语言中处理输入输出的基础。它主要包括两大类:字节流和字符流。字节流主要处理二进制数据,如图片、音频等;字符流则用于处理文本...

    java基础之IO流

    ### Java IO流基础知识点 #### 一、IO流概述 - **定义**:在Java中,IO流(Input/Output Streams)是用来处理输入输出的基本工具。流是一种有序的数据集合,通常涉及从源到目的地的数据传输过程。源可以是文件、...

    Java IO

    2. **广泛的适用范围**:Java 的 I/O 类必须能够在这些不同的环境中无缝工作,这意味着它们需要提供一系列复杂的接口和类来处理各种情况。 3. **庞大的 API 体系**:Java 的 I/O 库非常庞大且功能全面,学习者可能...

    java——IO流技术.pdf

    Java中的IO流主要位于`java.io`包中,该包包含了用于处理各种类型数据的流类。其中最重要的是五个类和三个接口: - **File**: 文件类,用于处理文件和目录的操作。 - **InputStream**: 字节输入流,用于从数据源...

    javaIO流笔记

    ### Java IO流知识点详解 #### 一、Java IO流概述 在Java中,输入/输出(Input/Output,简称IO)操作是程序与外部设备进行数据交换的重要方式。Java提供了强大的IO流处理类库,主要位于`java.io`包中。这些类库...

    IO详解宝典

    "IO详解宝典"这份资料很可能详细地介绍了Java中的IO流体系,包括基本概念、类库结构、使用方法以及高级特性。 IO流分为字节流和字符流两大类。字节流处理的是8位的字节数据,包括InputStream和OutputStream两个抽象...

    java高级特性 - io流.docx

    ### Java高级特性 - IO流详解 #### 一、概述 Java 中的 I/O(输入/输出)流是 Java 语言中用于处理输入和输出数据的重要机制。它提供了一种灵活的方式来读取和写入数据,可以用于文件操作、网络通信、数据流处理等...

    Java软件开发实战 Java基础与案例开发详解 13-1 Java IO 共9页.pdf

    通常情况下,在运行程序时,Java I/O程序会将源磁盘、文件或网络上的数据通过输入流类的相应方法读入内存,然后通过输出流类的相应方法将处理完的数据写回目标文件、磁盘或网络资源指定的位置。I/O系统类库位于`java...

Global site tag (gtag.js) - Google Analytics