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 IO详解知识点 #### 一、Java IO系统概述 - **Java I/O系统的重要性**:Java I/O系统是Java编程中的基础组成部分之一,用于处理数据的输入与输出。理解和熟练掌握Java I/O系统对于开发高质量的应用程序至...
Java I/O层次结构详解 Java I/O系统是Java平台中不可或缺的一部分,它为开发者提供了处理输入和输出的强大工具。在Java中,I/O操作主要基于流(Stream)的概念,流可以被视为数据的有序序列,既可以代表从源读取...
Java I/O系统是Java编程的重要组成部分,通过掌握不同的流类及其使用方法,可以有效地处理文件读写、网络通信等常见的输入输出操作。了解I/O流的基本概念、分类以及常用的类和接口,可以帮助开发者更好地理解和使用...
Java的IO体系分为字节流和字符流两大类,每种流又有输入流和输出流的对应。 字节流是最基础的IO流,处理单元为1个字节,主要包括`InputStream`和`OutputStream`两个抽象基类。例如,`FileInputStream`和`...
2. **字节流与字符流**:Java的I/O流分为字节流和字符流两大类。字节流处理原始的8位字节数据,如`FileInputStream`和`FileOutputStream`,适用于处理任何类型的数据。而字符流如`FileReader`和`FileWriter`则基于...
Java I/O体系结构主要分为两大类:字节流和字符流。每种流又可以根据数据流向分为输入流和输出流。 - **字节流**:处理8位字节的数据。 - **字符流**:处理16位Unicode字符。 #### 4. I/O流的创建 在Java程序中,...
Java I/O的相关类主要位于`java.io`包中,该包提供了丰富的API来支持各种I/O操作: - **通用类**:如`File`、`ObjectInputStream`等。 - **过滤器/缓冲流**:例如`BufferedInputStream`、`BufferedOutputStream`等...
Java的`java.io`包提供了多种字节流类,包括: - `InputStream`: 基本输入流类,用于读取数据。 - `OutputStream`: 基本输出流类,用于写入数据。 - `FileInputStream`和`FileOutputStream`: 用于从文件读取和向...
### Java JDK IO包类详解 #### 概述 Java平台提供的`io`包为开发者提供了访问文件系统、对象序列化等功能的基本输入输出能力。它主要包括字节流、字符流及对象流(字节流的包装类)。此外,还提供了一些基本的文件...
7. **Java I/O与NIO**:从传统的I/O模型到非阻塞I/O模型(New IO,即NIO),包括Channels、Buffers和Selectors的使用。 8. **反射API**:Java反射允许在运行时检查类、接口、字段和方法的信息,动态创建对象并调用...
### Java IO 详解 #### 一、Java IO体系概述 Java IO(Input/Output)是Java编程语言中处理输入输出的基础。它主要包括两大类:字节流和字符流。字节流主要处理二进制数据,如图片、音频等;字符流则用于处理文本...
### Java IO流基础知识点 #### 一、IO流概述 - **定义**:在Java中,IO流(Input/Output Streams)是用来处理输入输出的基本工具。流是一种有序的数据集合,通常涉及从源到目的地的数据传输过程。源可以是文件、...
2. **广泛的适用范围**:Java 的 I/O 类必须能够在这些不同的环境中无缝工作,这意味着它们需要提供一系列复杂的接口和类来处理各种情况。 3. **庞大的 API 体系**:Java 的 I/O 库非常庞大且功能全面,学习者可能...
Java中的IO流主要位于`java.io`包中,该包包含了用于处理各种类型数据的流类。其中最重要的是五个类和三个接口: - **File**: 文件类,用于处理文件和目录的操作。 - **InputStream**: 字节输入流,用于从数据源...
Java I/O 流可以根据它们的用途进一步划分为节点流(Node Stream)和过滤流(Filter Stream)。 - **节点流**:直接与一个特定的I/O设备进行交互,例如文件或网络连接。节点流是数据流动的起始点或终点,比如`...
### Java IO流知识点详解 #### 一、Java IO流概述 在Java中,输入/输出(Input/Output,简称IO)操作是程序与外部设备进行数据交换的重要方式。Java提供了强大的IO流处理类库,主要位于`java.io`包中。这些类库...
"IO详解宝典"这份资料很可能详细地介绍了Java中的IO流体系,包括基本概念、类库结构、使用方法以及高级特性。 IO流分为字节流和字符流两大类。字节流处理的是8位的字节数据,包括InputStream和OutputStream两个抽象...
### Java高级特性 - IO流详解 #### 一、概述 Java 中的 I/O(输入/输出)流是 Java 语言中用于处理输入和输出数据的重要机制。它提供了一种灵活的方式来读取和写入数据,可以用于文件操作、网络通信、数据流处理等...