InputStream类操作的是字节数据(byte),不是字符(char),在ASC11中字符和字节数据对应为8为数据,java的字符为16位数据,Unicode字符集对应的是16位字节数据,java的整数为32位。
一:保存字节级数据
a.DataOutputStream类,向输出流中写个java基本类型,所写的是可以移植的,它们能用DataInputStream类读取。
b.FileOutputStream类 可以简单的向文件写入数据。
简单代码(保存):
package inAndoutStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class SimpleOutPutTest {
public static void main(String[] args) {
double pi=3.1415;
int i= 10;
boolean okay=true;
char cc='j';
String s="java C pascle";
try {
FileOutputStream fs_out=new FileOutputStream("sample.dat");
DataOutputStream out=new DataOutputStream(fs_out);
out.writeDouble(pi);
out.writeInt(i);
out.writeBoolean(okay);
out.writeChar(cc);
out.writeUTF(s);
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在代码中,FileOutputStream fos= new FileOutputStream("Sample.dat"); ,是用来创建一个文件来保存数据;
Sample.dat <------ fs_out(FileOutputStream)<-------out(DataOutputStream)
二:读取字节级数据
a: DataInputStream
b: FileInputStream
简单代码(读取):
package inAndoutStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class SimpleInputTest {
public static void main(String[] args) {
try {
FileInputStream fis=new FileInputStream("sample.dat");
DataInputStream dis=new DataInputStream(fis);
double pi=dis.readDouble();
int i=dis.readInt();
boolean b=dis.readBoolean();
char c=dis.readChar();
String s=dis.readUTF();
dis.close();
System.out.println("pi= "+pi+", i= "+i);
System.out.println("b= "+b);
System.out.println("s= "+s);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
outprint:
写道
pi= 3.1415, i= 10
b= true
s= java C pascle
DataInputStream & DataOutputStream的作用一样,其的构造方法需要一个低层次的输入流对象作为参数,FileInputStream可以提供这个流的对象。
Sample.dat ------> fs_out(FileOutputStream)------->out(DataOutputStream)
三:BufferedOutputStream
bufferedOutputStream类增强了批量数据输出到另一个输出流的能力。当关闭时,如果缓存未满,就强迫将数据压入输出流中,所有关于输出流操作的方法都是自动进行缓存的。
以下是简单的代码对比:
不用缓存:
package inAndoutStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class WriteUnbufferTest {
public static void main(String[] args) {
try {
long start=System.currentTimeMillis();
FileOutputStream pos= new FileOutputStream("Daniel.dat");
DataOutputStream dos=new DataOutputStream(pos);
for(int i=0;i<100000;i++){
dos.writeDouble(Math.random());
}
dos.close();
long stop=System.currentTimeMillis();
System.out.println("Times ="+(stop-start));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
outprintln:
Times =656
有缓存:
package inAndoutStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class WriteBufferedTest {
public static void main(String[] args) {
try {
long start=System.currentTimeMillis();
FileOutputStream pos= new FileOutputStream("Daniel.dat");
BufferedOutputStream bos=new BufferedOutputStream(pos);
DataOutputStream dos=new DataOutputStream(bos);
for(int i=0;i<100000;i++){
dos.writeDouble(Math.random());
}
dos.close();
long stop=System.currentTimeMillis();
System.out.println("Times ="+(stop-start));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
outpirnt:
Times =94
Sample.dat ------> fos(FileOutputStream)----->bos(BufferedOutputStream) ------->dos(DataOutputStream)
分享到:
相关推荐
Idiot‘s_Guides_to_Beginning_Programming.pdf
博客《MySQL 数据库基础 学习笔记 0606》对应的 SQL 数据脚本,免费自取。传送门:https://blog.csdn.net/idiot5lie/article/details/117793661
~~~~~~~~~~~~~~~~~~ jetty9 windows websocket ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
An Idiot's Guide to C++ Templates
The Complete Idiot’s Guide to iPad and iPhone App Development .pdf
操作Excle非常方便的NPOI工具包。 附带ExcelHelper.cs操作类。 网上的很多类似的都有不少问题。 加载本工具包并配合附带的ExcelHelper.cs操作类,都经过本人亲自调试无误!
Idiot
概述 Jnario是用于编写Java可执行规范的框架。 它提供了Xtend的所有优势,同时专门为编写验收和单元测试而量身定制。 当Jnario规范被编译为普通Java Junit测试时,很容易集成。... I want to be told
The Complete Idiot's Guide to Improving Your IQ.pdf
Explorer扩展编程的指导资料,包括一个chm教程以及其对应的源代码。 Part I - A step-by-step tutorial on writing shell extensions Part II - A tutorial on writing a shell extension that operates on ...
傻瓜指南系列-如何作小生意]The.Complete.Idiot's.Guide.-.Small.Business.pdf
idiot
详细说明Windows Shell的编程指南,可以处理Windows Explorer资源管理器很多的交互,比如文件复制和剪切,鼠标右键菜单的添加,任意文件的图标的修改和叠加,系统文件拷贝进度条的控制等等,文件属性自定义扩展页和...
An Idiot’s guide to Support vector machines (SVMs)
加密已有文件,可以临时加密和永久解密;加密特定文件夹
“Tourist, Rincewind decided, meant 'idiot'.” -- Terry Pratchet 关于 这个博客有点(错误)冒险。 它在整个堆栈中使用 clojure,这是一种我以前从未做过任何实质性工作的语言。 虽然我喜欢 clojure(script),...
This guide helps environmentally conscious people make real-world ...·More than 80 regional and local green building programs are in place in the U.S. and more are being promoted in the private sector
语言:English (United States) 用“冒牌白痴”代替对总统的任何提及。 此扩展程序取代了对唐纳德·特朗普的任何提及,并将其替换为“冒白痴”。这是基于“ Cloud-to-But”而非常重的,请支持Cloud-to-butt的开发人员...
HTML Reference for dummies, idiot, beginner