JAVA 输入输出流 IO 总结
来源:互联网 发布:网站源码制作手机软件 编辑:程序博客网 时间:2024/06/10 03:09
字节流
InputStream 类系
OutputStream 类系
字符流
Reader 类系
Writer 类系
输入流和输出流的过滤
FilterInputStream 相关
FilterOutputStream 相关
字节流和字符流
- 字节流以字节为基本单位处理数据的输入输出,一般都用于二进制数据的读写,如声音,图像等.
- 字符流以字符为基本单位处理数据的输入输出,一般都用于对文本类型数据的读写,如文本文件,网络中发送的文本信息.
- 虽然文本数据也可以看做二进制数据,但一般采用字符流处理文本数据比采用字符流效率更高,也更方便.
InputStream and OutputStream
abstract class InputStream{//从数据中读入一个字节,并返回该字节,碰到流尾部返回-1 abstract int read(); //读入一个字节数组并返回读入的字节数,碰到流尾部返回-1,最多读入b.length个字节 int read(byte []b); //读入一个字节数组并返回实际读入的字节数,,流尾部返回-1,off 为在b中偏移量,len为最大字节数 int read(byte []b,int off,int lne); //跳过n个字节,返回实际跳过的字节数 long skip(long n); //返回再不阻塞的情况下可以提取的字节数 int available(); //关闭这个输入流 void close(); //在输入流的当前位置标记(并非所有流支持这个特性),如果输入流已经读入的字节多余readlimit个,允许忽略这个标记 void mark(); //返回到最后一个标记,随后对read的调用将重新读入这些字节,没有任何标记则该流不被重置 void reset(); //返回该流是否支持标记 boolean markSupported();}abstract class OutputStream{//写出一个字节的数据abstract void write();void write(byte []b);void write(byte []b,int off,int len);//冲刷并关闭输出流void close();//冲刷输出流,也就是将所有缓冲数据发送到目的地.void flush();}
几个接口
interface Closeable{//关闭这个Closeable,可能会抛出 IOExceptionvoid close();}interface Flushable{//冲刷这个 Flushablevoid flush();}interface Readable{//尝试这从cb读入其可持有的char值,返回读入的char值的数量,无法继续读入返回-1int read(CharBuffer cb);}interface Appendable{Appendable append(char c);//向这个Appendable追加指定码元或指定序列所有码元,返回thisAppendable append(CharSequence cs);}interface CharSequence{//返回指定索引处的码char charAt(int index);//返回这个序列中的码元的数量int length();//返回存储在 startIndex 和 endIndex-1之间的 所有码元构成的 CharSequenceCharSequence subSequence(int startIndex,int endIndex);//返回这个序列中所有码元构成的字符串String toString();}
读取字符
PrintWriter
class PrintWriter{PrintWriter(Writer out);PrintWriter(Writer out ,boolean autoFlush);//构建一个新的PrintWriter,可选是否自动冲刷PrintWriter(OutputStream);PrintWriter(OutputStream,boolean autoFlush);//通过构造必要的中介 OutputStreamReader 从OutputStream 构造 PrintWriterPrintWriter(String fileName);PrintWriter(File file);//通过构造必要的中介 FIleWriter 从文件构造 PrintWritervoid print(Object obj);void print(String s);void println(String s);void print(char []s);void print(int i);void print(long l);void print(float f);void print(double d);void print(boolean b);//格式化输出void printf(String format,Object...args);//如果产生格式化输出错误返回true,一旦一个流遇到了错误,它将会收到污染,并对所有 checkError调用返回 trueboolean checkError();}
字符集相关
class CharSet{//获取这个虚拟机可以使用的所有字符集,返回一个映射表,键是字符集名字,值是字符集static SortedMap availableCharSet();//获取给定名字的字符集static CharSet forName(String name);//返回这个字符集的别名Set aliases();//给定字符串编码为字节序列ByteBuffer encode(String str);//解码给定字节序列,无法识别的输入将被转换成Unicode的替代字符 '\uFFFD'CharBuffer decode(ByteBuffer buffer);}class ByteBuffer{byte []array();//返回这个缓冲区管理的字节数组static ByteBuffer wrap(byte []bytes);static ByteBuffer wrap(byte []bytes,int offset,int length);//返回管理给定字节数组的某个范围的字节缓冲区}class CharBuffer{ //返回这个缓冲区管理的码元数组char []array();//返回给定索引处的码元char charAt();//返回这个缓冲区管理的码元构成的字符串String toString();}//more code ...Charset charset=Charset.forName("utf-8");String content="字符集";ByteBuffer byteBuffer=charset.encode(content);byte []bytes=byteBuffer.array();ByteBuffer bbuf=ByteBuffer.wrap(bytes);CharBuffer cbuf=charset.decode(bbuf);String string=cbuf.toString();System.out.println(string);//more code ...
读写二进制数据
DateInput and DataOutput
interface DataInput{boolean readBoolean();byte readByte();char readChar();double readDouble();int readInt();long readLong();short readShort();//读入给定类型的数据void readFully(byte []b);//读入字节到数组b,其间阻塞直至所有字节都读入void readFully(byte []b,int off,int len);//读入字节到数组b,其键阻塞直至所有字节都读入, off数据起始位置偏移量,len读入数据最大数量String readUTF();//读入由修订过的 UTF-8 格式的字符构成的字符串int skipBytes(int n);//跳过n个字节,其间阻塞直至所有字节都被跳过}interface DataOutput{void writeBoolean(boolean b);void writeByte(byte b);void writeChar(char c);void writeDouble(double d);void writeFloat(float f);void writeInt(int i);void writeLont(long l);void writeShort(short s);void writeChars(String s);void writeUTF(String s);}
RandomAccessFile
class RandomAccessFile{RandomAccessFile(String file,String mode);RandomAccessFile(File file,String mode);// "r" 表示只读, "rw" 表示读写 ,"rws"表示每次更新时对数据和元数据的写磁盘操作进行同步的读写模式// "rwd" 表示每次更新时,只对数据的写磁盘操作进行同步的读写模式long getFilePointer();//返回文件指针的当前位置void seek(long pos);//将文件指针设置到距离开头的pos个字节处long length();//返回文件按照字节来衡量的长度}
Zip
未完待续...对象序列化
class People implements Serializable{String name;int age;People(String name,int age){this.name=name;this.age=age;}public String toString() {return name+" "+age;}}public static void testSerializable(){People []peoples=new People[]{new People("Mike",15),new People("Jack", 16)};try(FileOutputStream fout=new FileOutputStream("/home/yzr/desktop/dat.txt")){ObjectOutputStream oout=new ObjectOutputStream(fout);oout.writeObject(peoples);}catch (IOException e) {e.printStackTrace();}try(FileInputStream fin=new FileInputStream("/home/yzr/desktop/dat.txt");){ObjectInputStream oin=new ObjectInputStream(fin);People [] cPeoples=(People[])oin.readObject();for(People people:cPeoples)System.out.println(people);}catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException ce) {ce.printStackTrace();}}
利用对象序列化深拷贝
class SerialClonable implements Serializable ,Cloneable{public Object clone(){try {ByteArrayOutputStream bout=new ByteArrayOutputStream();ObjectOutputStream oout=new ObjectOutputStream(bout);oout.writeObject(this);oout.close();ByteArrayInputStream bin=new ByteArrayInputStream(bout.toByteArray());ObjectInputStream oin=new ObjectInputStream(bin);Object ret=oin.readObject();oin.close();return ret;} catch (Exception e) {return null;}}}
0 0
- JAVA 输入输出流 IO 总结
- java Io总结一(输入输出流)
- Java IO输入输出流
- java io 输入输出流
- Java IO(输入输出流)
- Java输入输出流IO
- JAVA-IO输入输出流
- Java-IO-输入输出流
- java io 输入输出流
- Java IO流学习总结一:输入输出流
- Java中IO流,输入输出流概述与总结
- Java中IO流,输入输出流概述与总结
- Java中IO流,输入输出流概述与总结
- Java中IO流,输入输出流概述与总结
- Java中IO流,输入输出流概述与总结
- java io 流 输入输出 大牛经典总结
- java IO总结之字节流操作控制台输入输出
- java IO总结之字符流操作控制台输入输出(高效)
- MyEclipse突然关闭
- Shrio登陆验证实例详细解读
- 联动菜单:javaScript
- HDU 2955
- 理解iOS中的MVC设计模式
- JAVA 输入输出流 IO 总结
- 守护线程和非守护线程
- 求数组的子数组之和的最大值
- POJ 1151 Atlantis(线段树+扫描线)
- 【Html】三种CSS样式的优先级
- 【插件开发一】开发简单OpenFire插件
- LeetCode OJ——Best Time to Buy and Sell Stock
- Matlab常用对话框
- 配色原理