转换流:
InputStreamReader和OutputStreamWriter用于字节数据到字符数据之间的转换。
InputStreamReader需要和InputStream套接。
OutputStreamWriter需要和OutputStream套接。
转换流在构造时可以指定其编码集合。
import java.io.*; public class TestTransForm1{ public static void main(String[] args){ try{ OutputStreamWriter osw=new OutputStreamWriter(//字符流流向字节流的桥梁 new FileOutputStream("d:\bak\char.txt"));//文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流 osw.write("microsoft ibmsunapplehp"); System.out.println(osw.getEncoding()); osw.close(); osw=new OutputStreamWriter( new FileOutputStream("d:\bak\char.txt",true), "ISO8859_1"); osw.write("microsoft ibmsunapplehp"); System.out.println(osw.getEncoding());//返回此流使用的字符编码的名称。 osw.close(); }catch (IOException e){ e.printStackTrace();//打印出异常和更深层次的调用信息。 } } }
import java.io.*; public class TestTransForm2{ public static void main(String[] args){ InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); String s=null; try{ s=br.readLine();//输入一个数 while(s!=null){ if(s.equalsIgnoreCase("exit"))break;// 将此 String 与另一个 String 比较,不考虑大小写 System.out.println(s.toUpperCase());//使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 s=br.readLine();// 读取一个文本行。 } br.close(); }catch (IOException e){ e.printStackTrace();//打印出所有的调用情况和错误信息 } } }
数据流:
DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,它属于处理流。需要套接在InputStream和OutputStream类型的结点流上。
DataInputStream和DataOutputStream提供了可以存取与机器无关的Java原始类型数据的方法。
import java.io.*; public class TestDataStream{ public static void main(String[] args){ ByteArrayOutputStream baos=new ByteArrayOutputStream();//此类实现了一个输出流,其中的数据被写入一个 byte 数组 // 创建一个新的数据输出流,将数据写入指定基础输出流。 DataOutputStream dos=new DataOutputStream(baos); try{ dos.writeDouble(Math.random()); dos.writeBoolean(true); ByteArrayInputStream bais=new ByteArrayInputStream(baos.toByteArray()); System.out.println(bais.available()); DataInputStream dis=new DataInputStream(bais) ; System.out.println(dis.readDouble()); System.out.println(dis.readBoolean()); dos.close(); dis.close(); }catch(IOException e){ e.printStackTrace(); } } }