理解数据流
流一般分为输入流(Input Stream)和输出流(Output Stream)两类,但这种划分并不是绝对的。比如一个文件,当向其中写数据时,它就是一个输出流;当从其中读取数据时,它就是一个输入流。当然,键盘只是一个数人流,而屏幕则只是一个输出流。
字节流:
从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位。
InputStream、OutputStream
◇ FileInputStream、FileOutputStream
◇ PipedInputStream、PipedOutputStream
◇ ByteArrayInputStream、ByteArrayOutputStream
◇ FilterInputStream、FilterOutputStream
◇ DataInputStream、DataOutputStream
◇ BufferedInputStream、BufferedOutputStream
字符流:
从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位
Reader、Writer
◇ InputStreamReader、OutputStreamWriter
◇ FileReader、FileWriter
◇ CharArrayReader、CharArrayWriter
◇ PipedReader、PipedWriter
◇ FilterReader、FilterWriter
◇ BufferedReader、BufferedWriter
◇ StringReader、StringWriter
例子1
import java.io.*;
public class Input1
{
public static void main(String args[]) throws IOException
{
System.out.println("Input: ");
byte buffer[] = new byte[512]; //输入缓冲区
int count = System.in.read(buffer); //读取标准输入流
System.out.println("Output: ");
for (int i=0;i<count;i++) //输出buffer元素值
{
System.out.print(" "+buffer[i]);
}
System.out.println();
for (int i=0;i<count;i++) //按字符方式输出buffer
{
System.out.print((char) buffer[i]);
}
System.out.println("count = "+ count); //buffer实际长度
}
}
运行结果:

例子2:
public class Input2
{
public static void main(String[] args)
{
String Str=args[0];
String Str1=args[1];
int tempInt=Integer.parseInt(Str);
int tempInt1=Integer.parseInt(Str1);
tempInt *=2;
tempInt1*=3;
System.out.println(tempInt);
System.out.println(tempInt1);
}
}
运行结果

例子3:
import java.io.*;
public class Input3
{
public static void main(String[] args)
throws IOException
{
BufferedReader in =new BufferedReader(new InputStreamReader(System.in));
String s;
while((s = in.readLine()).length() != 0)
{
int i=Integer.parseInt(s);
System.out.println("您的输入数的两倍是 : " + i*2);
}
}
} //存在一个问题没有退出
运行结果

例子4:
public class Input4 {
public static void main(String[] args) {
byte[] buf = new byte[256];
try {
// input
String str="";
do{
int c = System.in.read(buf,0,buf.length);
str += new String(buf,0,c);
} while(System.in.available()>0) ;
str = str.substring(0,str.length()-1); // remove the last return
int v = Integer.parseInt(str.trim());
System.out.println(""+v*2);
}
catch(Exception e)
{e.printStackTrace();}
}
}
运行结果

例子5 :
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
public class Input5 {
public static void main(String[] args) throws IOException {
BufferedInputStream bs = new BufferedInputStream(System.in);
DataInputStream dis = new DataInputStream(bs);
byte[] b = new byte[4];//读取前四位
dis.read(b);
System.out.println(new String(b,"gbk"));
dis.close();
}
}
运行结果:
