Java-输入输出
1. 流的分类
java.io
1.1 输入和输出流
File类不能访问文件内容本身,需要使用输入/输出流
输入输出流的方向是相对与内存读写的方向。

1.2 字节流和字符流
- 字节流
- InputSteam
- OutputStream
- 字符流
- Reader
- Writer
- BufferedReader
1.3 节点流和处理流
处理流:
- PrintStream
- FileInputStream
- FileOutputStream
FileOutputStream fos = new FileOutputStream("text.txt");
PrintStream ps = new PrintStream(fos);
ps.println("sdfsdf");
2. 转换流
只有字节流转为字符流。(InputStreamReader, OutputStreamWriter)
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(reader);//再次包装
String line = br.readLine();
3. 推回输入流
4. 重定向标准输入/输出
System.setErr(PrintStream err);
System.setIn(InputStream in);
System.setOut(PrintStream out);
5. java虚拟机读写其他进程的数据
InputStream p.getErrorStream();
InputStream p.getInputStream();
Outputstream p.getOutputStream();
Process p = Runtime.getRuntime().exec("javac");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String buff = null;
while((buff = br.readLine()) != null){
System.out.println(buff);
}
Scanner sc = new Scanner(System.in);//用于获取标准输入
6. RandomAccessFile:
只能读写文件,不能读写其他IO节点。可以任意改变指针的位置。当向文件的中间部分插入内容时,会覆盖从指针开始的内容,所以需要先保存从指针到末尾的内。
操作文件记录指针的方法:
- long getFilePointer();
- void seek(long pos);
读写方法
- read()
- write()
RandomAccessFile raf = new RandomAccessFile("AA.java", "r");
raf.seek(300);//指针移到300字节处
7. 对象序列化
类必须实现Serializable和Externalizable接口之一。通常每个javabean都实现Serializable接口。
7.1 使用对象流序列化
ObjectOutputStream、ObjectInputStream
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt"));
Person per = new Person("name",age);
oos.writeObject(per);
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.txt"));
Person p = (Person)ois.readObject();
反序列化读取的是java对象的数据,而不是java类,因此反序列化恢复java对象时,必须提供java对象所属的class文件。
反序列化机制无须通过构造器来初始化对象。
一个对象重复序列化时,只有第一次将对象转为字节序列并输出,后续的序列化,都是获得序列化编号。并且,在第一次序列化之后,对象的属性的更改,不会被序列化。
7.2 自定义序列化:
private transient int age;
在序列化之前,先调用writeReplace()再调用writeObject()方法。
反序列化,系统先调用readObject(),再调用readResolve()。后者的返回值,会取代前者的返回结果。后者常常用于序列化单例类和枚举。
对象的类名、实例变量(包括基本类型、数组、对其他对象的引用)都会被序列化;方法、类变量、transient实例变量都不会被序列化。
7.3 Externalizable实现序列化
8. NIO
8.1 Buffer
- CharBuffer
- ByteBuffer
- ShortBuffer
- IntBuffer
- LongBuffer
- FloatBuffer
- DoubleBuffer
Charbuffer和ByteBuffer最常用。
0≤mark≤position≤limit≤capacity
allocate(int count)
flip()
clear()
CharBuffer buff = CharBuffer.allocate(8);
System.out.println("capacity:" + buff.capacity());
System.out.println("limit:" + buff.limit());
System.out.println("position:" + buff.position()); System.out.println("\nput begin:");
buff.put('a');
System.out.println("position = " + buff.position());
buff.put('b');
System.out.println("position = " + buff.position());
buff.put('c');
System.out.println("position = " + buff.position()); System.out.println("\nflip begin:");
buff.flip();
System.out.println("limit=" + buff.limit());
System.out.println("position=" + buff.position()); System.out.println("\nread begin:");
System.out.println(buff.get());
System.out.println("position = " + buff.position());
System.out.println(buff.get());
System.out.println("position = " + buff.position());
System.out.println(buff.get());
System.out.println("position = " + buff.position()); System.out.println("\nclear begin:");
buff.clear();
System.out.println("limit=" + buff.limit());
System.out.println("position=" + buff.position());
8.2 Chanel
程序不能直接访问Channel中的数据,包括读取、写入都不行。只能与buffer交互。
- FileChannel
- DatagramChannel
- Pipe.SinkChannel
- Pipe.SourceChannel
所有的channel都通过节点流的getChannel()方法来返回对象。
channel的方法:
- map()
- read()
- write()
8.3 Charset
public class CharsetTest {
public static void main(String[] args) throws CharacterCodingException{
Charset cn = Charset.forName("GBK");
CharsetEncoder encoder = cn.newEncoder();
CharsetDecoder decoder = cn.newDecoder();
CharBuffer cbuff = CharBuffer.allocate(8);
cbuff.put("孙");
cbuff.put("悟");
cbuff.put("空");
cbuff.flip();
ByteBuffer bbuff = encoder.encode(cbuff);
for(int i=0;i<bbuff.capacity();i++){
System.out.println(bbuff.get(i)+"");
}
System.out.println("\n"+decoder.decode(bbuff));
}
}
8.4 文件锁
- lock()
- tryLock()
Java-输入输出的更多相关文章
- java 输入输出 io
学习JAVA 输入输出篇 java不像C中拥有scanf这样功能强大的函数,大多是通过定义输入输出流对象.常用的类有BufferedReader,Scanner.实例程序:一,利用 Scanner ...
- Java输入输出小结
无论使用哪一种编程语言,输入输出都是我们首当其冲的,因此简单整理了 一下关于Java输入输出知识点,还有些内容摘自其它博客,忘见谅. 第一部分,让我们看一下Java的输出 public class M ...
- ACM之Java输入输出
本文转自:ACM之Java输入输出 一.Java之ACM注意点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错 ...
- Java—输入输出技术
在Java中,通过java.io包提供的类来表示流,基本的输入输出流为InputStream和OutputStream.从这两个基本的输入输出流派生出面向特定处理的流,如缓冲区读写流.文件读写流等. ...
- java 输入输出 函数对象构造
/*********************输入输出*******************/ //输入字符串 不包括最后的换行符'\n' import java.io.BufferedRe ...
- java输入输出
1. import java.io.*;//写进文档,然后又在显示器显示出来.public class fileinputstream{public static void main(String[] ...
- java输入输出高速
头文件: import java.io.*; 定义: BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); ...
- 蓝桥杯Java输入输出相关
转载自:http://blog.csdn.net/Chen_Tongsheng/article/details/53354169 一.注意点 1. 类名称必须采用public class Main方式 ...
- Java基础教程——使用Eclipse快速编写Java输入输出代码
Eclipse安装 IDE:Integrated Development Environment,集成开发环境.好比是全自动洗衣机. 此处使用[eclipse-jee-4.6-neon-3-win32 ...
- java 输入输出 对象序列化implements Serializable与反序列化:ObjectOutputStream.writeObject() ;objectInputStream.readObject() ;serialVersionUID字段注意
对象序列化 对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象.对象序列化机制允许把内存中的 Java 对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,通过网络将 ...
随机推荐
- strong和b
strong和b标签都是很久以前遗留下来的标签,b标签用来加粗字体,strong用来强调,通常浏览器会把强调的语句加粗,所以二者效果比较近似.语义化愈发受重视以后,b标签退出大众视野,strong依然 ...
- ZPPR001-(展bom)
************************************************************************ Title : ZPPR010 ** Applicat ...
- c#部分---用函数的四种格式做一元二次方程
格式一:(无参无返) public void fangcheng() { Console.WriteLine("请输入a的值"); double a = int.Parse(Con ...
- 关于xmlhttprequest的readystate属性的五个状态
http://www.cnblogs.com/jerry01/archive/2009/09/03/1559624.html 昨天做了一个利用 ajax实现页面无刷新的从服务器端获得时间的例子,当时对 ...
- 《Java程序设计》第4周学习总结
学号20145220 <Java程序设计>第4周学习总结 6.1.1 继承共同行为 •定义:继承基本上就是避免多个类间重复定义共同行为. •优点:1.提高了代码的复用性.2.让类与类之间产 ...
- JS数组随机排序
var arr=[1,2,3,4,5]; arr.sort(function(a,b){ var v=Math.random()>0.5?1:-1; console.log(a,b,v); re ...
- Tyvj 9.10 总结 (其实只是发一下心情)
原以为能拿200的,然而看到成绩彻底方了,60滚粗,连100都不到 这种成绩连一等都拿不到,我tm还谈什么省选,更别说NOI了 目前还没有部分分版本的,也没有数据,不知道问题出在哪里 tyvj群里好多 ...
- ExtJS Panel主要配置列表
Ext.panel.Panel 属性 值 描述 animCollapse Boolean 设置面板折叠展开是否显示动画,Ext.Fx可用默认true,否则false applyTo Mixed 面板定 ...
- ARM1138@PWM例程分析
1. Buzzer例程控制原理 由ARM1138原理图可得:Buzzer使用CCP3(对应GPIO-G组0x40026000,4号引脚0x00000010)作为输入引脚: Buzzer例程结构: 涉及 ...
- 答辩ppt
目录:1.2.3.4 poct市场 荧光免疫技术(特点:灵敏性.可做仪器很小) 意义 国内外现状:万福.天宝 研究内容1.2.3. 一.意义与背景 二.内容(测量原理) 目标 三.仪器设计 1.基本测 ...