博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java网络编程(一)流
阅读量:6161 次
发布时间:2019-06-21

本文共 3991 字,大约阅读时间需要 13 分钟。

一、前言

一直以来流都是困扰新手和才工作者的东东,这里也算给新来者一些简介。用最简单的语言,说明罪简单的道理。希望如此

二、流的简单

2.1 基础流输入流inputStream

拥有的方法:reed(读取)、available(可以读取最少长度)、close(关闭)、
package stream;import java.io.IOException;import java.io.InputStream;/** * Created by ycy on 16/3/5. * inputStream 输入流主要方法 * read * skip(网络中一般很少用) * available * close */public class InputStream_test {    public static void main(String[] args) throws IOException {        InputStream in=null;//没有实现        /*单字节读取*/        byte[] input=new byte[10];        for (int i = 0; i 

2.2基础流输出流outputStram

拥有的方法 write(写入)、flush(刷新)、close(关闭)、
/**     * 单字节输入     *     * @param out     * @throws IOException     */    public static void generateCharacters(OutputStream out) throws IOException {        int fistPrintableCharacter = 33;        int numberOfPrintableCharacters = 94;        int numberOfCharactersPerLine = 72;        int start = fistPrintableCharacter;        while (true) {            /*无限循环*/            for (int i = start; i < start + numberOfCharactersPerLine; i++) {                out.write((                        (i - fistPrintableCharacter) % numberOfCharactersPerLine) + fistPrintableCharacter);            }            out.write('\r');//回车            out.write('\n');//换行            start = ((start + 1) - fistPrintableCharacter) % numberOfCharactersPerLine + fistPrintableCharacter;        }    }    /**     * 有数组缓存测输入流     *     * @param out     * @throws IOException     */    public static void getnerateCharacters(OutputStream out) throws IOException {        int fistPrintableCharacter = 33;        int numberOfPrintableCharacters = 94;        int numberOfCharactersPerLine = 72;        int start = fistPrintableCharacter;        byte[] line = new byte[numberOfCharactersPerLine + 2];        //+2 对应回车和换行        while (true) {            for (int i = start; i < start + numberOfCharactersPerLine; i++) {                line[i - start] = (byte) ((i - fistPrintableCharacter) % numberOfPrintableCharacters + fistPrintableCharacter);            }            line[72] = (byte) '\r';            line[72] = (byte) '\n';            try {                out.write(line);            } catch (IOException ex) {                System.out.println(ex.getMessage());            }            out.write(line);            start = ((start + 1) - fistPrintableCharacter) % numberOfPrintableCharacters + fistPrintableCharacter;        }    }

2.3 基础流总结

基础流的基本方法 read与Write 数组的扩展,表示可以缓存字节,这样在网络传输中更快(因为每次传输都需要在我们需要消息里面加报文其他信息的)。就2、3个方法,是不是没你想的那么复杂。流不要理解那么深,就理解为字节传输通道就ok。是不是很简单,不需要太多语言来讲解复杂的解释

2.4 过滤流

 所谓过滤流就是除开基础类的其他流的类,其实都是基于者两个类的扩展。过滤流使用原则---使用最后封装的一个!!
或者如此也行
DataOutputStream dataout = new DataOutputStream(                           new BufferedOutputStream(                           new FileOutputStream("data.txt")));

2.4.1 缓冲流

在使用的时候我们基本都用缓充流,什么叫缓冲就是你直接喝水与与杯子喝水的区别。用杯子要快一些吧!
默认输入缓冲:2048 字节       默认输出缓冲:512字节
  1. bufferinputStream:多字节读取多次从底层输入流中读取数据,加入数组。
  2. BuffredOutputStream:每次写入缓冲区,而不是写入底层输出流,因此必应要flush方法。
  3. printStream:不要用,因为他没有编码,使用的是平台默认编码,跨平台怎么办。 包括以后的prinWriter(已经接近编码问题)也不要用,java大神说的照做就ok。

2.4.2  数据流

  dataoutputStream 与 dataInputStream ,专业读取数据的,可以看看api稳定就ok,我没有经常用啦。

2.4.3 阅读器与书写器

唯一的好处:将字节变为字符,我们读起来更快,杯子(缓冲流)成为了饮料(阅读书写器),都装好了!!!
  1. writer书写器:Writer 与outputStream的子类。outputStreamWriter是Writer的子类,注意指定编码方式
  2. Reader阅读器:他也有一个方法available不是返回字节数,而是返回boolean
  3. 总结:把面向字节变换为面向字符的接口InputStreamReader 与OutputStramWirter都是过滤器;默认使用缓存区8192字符
//读取input流的阅读器/** * 使用reader 字节变为字符 * 使用bufferreader 使用缓存加快了速度 * @param in * @return * @throws IOException */public  static String getMaccyrillicString(InputStream in) throws IOException{    Reader re=new InputStreamReader(in,"macCyrillic");    re=new BufferedReader(re,1024);    StringBuilder sb=new StringBuilder();    int c;    while ((c= re.read())!=-1){        sb.append((char)c);    }    return sb.toString();}public static void main(String[] args) {}

三、总结

这一章节我们用几句话形容了流的内容,用几段代码来展示了流的读取写出。记住一个原则就ok:要想快用缓存,再快就是读字符。
从基础流要过滤器流,就是一个基类到子类的一些扩展。没什么难得,没事上面几行代码,在项目里面足够处理流的数据了。就是一句话解决的事情,是不是??
看过请评论一下,指点一下,我可以学习进步一下。谢谢!! 不想闭门造车

转载地址:http://koofa.baihongyu.com/

你可能感兴趣的文章
http协议组成(请求状态码)
查看>>
怎样成为一个高手观后感
查看>>
[转]VC预处理指令与宏定义的妙用
查看>>
MySql操作
查看>>
python 解析 XML文件
查看>>
MySQL 文件导入出错
查看>>
java相关
查看>>
由一个异常开始思考springmvc参数解析
查看>>
向上扩展型SSD 将可满足向外扩展需求
查看>>
虚机不能启动的特例思考
查看>>
SQL Server编程系列(1):SMO介绍
查看>>
在VMware网络测试“专用VLAN”功能
查看>>
使用Formik轻松开发更高质量的React表单(三)<Formik />解析
查看>>
也问腾讯:你把用户放在什么位置?
查看>>
CSS Sprites 样式生成工具(bg2css)
查看>>
[转]如何重构代码--重构计划
查看>>
类中如何对list泛型做访问器??
查看>>
C++解析XML--使用CMarkup类解析XML
查看>>
P2P应用层组播
查看>>
Sharepoint学习笔记—修改SharePoint的Timeouts (Execution Timeout)
查看>>