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流的典型使用方式详解,尽管可以通过不同的方式组合IO流类,但我们可能也就只用到其中的几种组合。下面的例子可以作为典型的IO用法的基本参考,,需要的朋友可以参考下
里面有java流的详解----从入门到掌握,里面有详细的代码解释,也有详细的笔记教程,望采纳
一、文件的编码 开发时一定要注意项目默认的编码!!!!!!!! 文件操作的时候一定要记得关闭!... ASCII:美国标准信息交换码,用一个字节的7位可以表示一个字符 ISO8859-1:拉丁码表,西欧标准字符集,...
详解Java I/O相关知识点.学习Java语言IO的数据流概念,讲述了每个类的具体应用范围,IO基本概念,输入输出流的处理,并且给出众多的实例代码。 。
节点流和处理流 Java IO 的核心类 File Java IO 流对象 字节流对象InputStream OutputStream 字符流对象Reader Writer 字节流与字符流的转换新潮的 NIO 缓冲区(Buffer)通道(Channel) 示例:文件拷贝案例 BIO 和 NIO ...
主要介绍了Java I/O 操作及优化详细介绍的相关资料,需要的朋友可以参考下
Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入 输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。 在Java类库中,IO部分的内容是很庞大的,...
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
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中的I/O分为两种类型,一种是顺序读取,一种是随机读取,需要的朋友可以参考下
if(x[sl]*16-w/2) x0=x-w/2; else x0=W[sl]*16-w; } else x0=0; if(y>=h/2) { if(y[sl]*16-h/2) y0=y-h/2; else y0=H[sl]*16-h; } else y0=0; isTask=false; isTask2=...
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 ...
•在java类里只能包含Field,方法,构造器,初始化块,内部类(接口、枚举)等5种成员。 用static修饰的类成员属 于类成员,类Field既可通过类来访问,也可以通过类的对象来访问。当通过对象来访问类属性时,系统会在底...
[14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核感悟 Linux内核启动 从hello world说起 3 ...读核感悟 文件读写 内核态是否支持非direct I O方式的AIO ...