`

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中I/O流的典型使用方式详解

    主要介绍了Java I/O中I/O流的典型使用方式详解,尽管可以通过不同的方式组合IO流类,但我们可能也就只用到其中的几种组合。下面的例子可以作为典型的IO用法的基本参考,,需要的朋友可以参考下

    java_I/O流的教程

    里面有java流的详解----从入门到掌握,里面有详细的代码解释,也有详细的笔记教程,望采纳

    Java I/O输入输出流详解

    一、文件的编码  开发时一定要注意项目默认的编码!!!!!!!!  文件操作的时候一定要记得关闭!...  ASCII:美国标准信息交换码,用一个字节的7位可以表示一个字符  ISO8859-1:拉丁码表,西欧标准字符集,...

    Java_IO操作总结

    详解Java I/O相关知识点.学习Java语言IO的数据流概念,讲述了每个类的具体应用范围,IO基本概念,输入输出流的处理,并且给出众多的实例代码。 。

    Java 基础核心总结 +经典算法大全.rar

    节点流和处理流 Java IO 的核心类 File Java IO 流对象 字节流对象InputStream OutputStream 字符流对象Reader Writer 字节流与字符流的转换新潮的 NIO 缓冲区(Buffer)通道(Channel) 示例:文件拷贝案例 BIO 和 NIO ...

    Java I/O 操作及优化详细介绍

    主要介绍了Java I/O 操作及优化详细介绍的相关资料,需要的朋友可以参考下

    Java BIO、NIO、AIO、Netty知识详解(值得珍藏)

    Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入 输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。 在Java类库中,IO部分的内容是很庞大的,...

    Ubuntu16.04安装Jenkins的方法图文详解

    1.前提准备 JDK已经安装 echo $PATH 创建一个软连接 根据自己jdk安装路径来配置 ln -s /java/jdk1.8.0_231/bin/java /usr/bin/java ...wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key

    整理后java开发全套达内学习笔记(含练习)

    export ORACLE_HOME=/oracledata/.../bin: BufferedReader建构时接受java.io.Reader物件 可使用java.io.InputStreamReader 例: import java.io.InputStreamReader; import java.io.BufferedReader; class n{ ...

    java 基础知识之IO总结

    主要介绍了java 基础知识之IO总结的相关资料,Java中的I/O分为两种类型,一种是顺序读取,一种是随机读取,需要的朋友可以参考下

    j2me手机游戏代码

    if(x[sl]*16-w/2) x0=x-w/2; else x0=W[sl]*16-w; } else x0=0; if(y&gt;=h/2) { if(y[sl]*16-h/2) y0=y-h/2; else y0=H[sl]*16-h; } else y0=0; isTask=false; isTask2=...

    Android开发应用实战详解源代码

    5.12.2 java i/o基本类库介绍 5.12.3 具体实现 5.13 获取file和cache的路径 5.14 wi-fi服务 5.14.1 wi-fi简介 5.14.2 实现原理 5.14.3 具体实现 5.15 获取sim卡内信息 5.15.1 sim卡简介 5.15.2 实现原理 5.15.3 ...

    【05-面向对象(下)】

    •在java类里只能包含Field,方法,构造器,初始化块,内部类(接口、枚举)等5种成员。 用static修饰的类成员属 于类成员,类Field既可通过类来访问,也可以通过类的对象来访问。当通过对象来访问类属性时,系统会在底...

    [14本经典Android开发教程]-8-Linux内核阅读心得体会

    [14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核感悟 Linux内核启动 从hello world说起 3 ...读核感悟 文件读写 内核态是否支持非direct I O方式的AIO ...

Global site tag (gtag.js) - Google Analytics