Java网络编程(一)流

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

一、前言

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

二、流的简单

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 <input.length ; i++) {
            int b=in.read();
            if (b==-1)break;
            input[i]=(byte) b;
        }
        /*读取真正字节数量*/
        int bytesRead=0;
        int byteToRead=1024;
        byte[] input2=new byte[byteToRead];
        while (bytesRead<byteToRead){
            int result=in.read(input2,bytesRead,byteToRead-bytesRead);
            if (result==-1)break;//流结束
            bytesRead+=result;
        }
        /*available建议字节*/
        int byteAvailable=in.available();
        byte[] input3=new byte[byteAvailable];
        int bytestRead3=in.read(input,0,byteAvailable);
        //立即执行其他程序部门
    }
}

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:要想快用缓存,再快就是读字符。
从基础流要过滤器流,就是一个基类到子类的一些扩展。没什么难得,没事上面几行代码,在项目里面足够处理流的数据了。就是一句话解决的事情,是不是??
看过请评论一下,指点一下,我可以学习进步一下。谢谢!! 不想闭门造车



目录
相关文章
|
3天前
|
网络协议 算法 Java
【Java网络编程】网络编程概述、UDP通信(DatagramPacket 与 DatagramSocket)
【Java网络编程】网络编程概述、UDP通信(DatagramPacket 与 DatagramSocket)
16 3
|
11小时前
|
Java 开发者 Spring
Java一分钟之-Java网络编程基础:Socket通信
【5月更文挑战第13天】本文介绍了Java Socket编程基础知识,包括使用`ServerSocket`和`Socket`类建立连接,通过`OutputStream`和`InputStream`进行数据传输。常见问题涉及忘记关闭Socket导致的资源泄漏、网络异常处理及并发同步。理解Socket通信原理并掌握异常处理、资源管理和并发控制,能帮助开发者构建更稳定的网络应用。
8 1
|
4天前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
9 0
|
14天前
|
安全 Java 网络安全
深入理解Java异常处理网络安全与信息安全:保护数据的关键策略
【4月更文挑战第29天】本文将深入探讨Java中的异常处理机制,包括异常的概念、分类、捕获和处理等方面。通过详细的解析和实例演示,帮助读者更好地理解Java异常处理的原理和应用。 【4月更文挑战第29天】在数字化时代,数据成为最宝贵的资产之一。随着网络攻击的日益猖獗,了解并实施有效的网络安全和信息保护措施变得至关重要。本文将深入探讨网络安全漏洞的概念、加密技术的重要性以及提升个人和企业的安全意识的必要性。我们将分析当前的安全挑战,并提供一系列实用的防护策略,旨在帮助读者构建一个更加安全的数字环境。
|
17天前
|
网络协议 Java 网络架构
Java基础教程(18)-Java中的网络编程
【4月更文挑战第18天】Java网络编程简化了底层协议处理,利用Java标准库接口进行TCP/IP通信。TCP协议提供可靠传输,常用于HTTP、SMTP等协议;UDP协议则更高效但不保证可靠性。在TCP编程中,ServerSocket用于监听客户端连接,Socket实现双进程间通信。UDP编程中,DatagramSocket处理无连接的数据报文。HTTP编程可以通过HttpURLConnection发送请求并接收响应。
|
24天前
|
监控 网络协议 Java
《Java 简易速速上手小册》第7章:Java 网络编程(2024 最新版)
《Java 简易速速上手小册》第7章:Java 网络编程(2024 最新版)
23 0
《Java 简易速速上手小册》第7章:Java 网络编程(2024 最新版)
|
24天前
|
监控 Java 开发者
深入理解 Java 网络编程和 NIO
【4月更文挑战第19天】Java网络编程基于Socket,但NIO(非阻塞I/O)提升了效率和性能。NIO特点是非阻塞模式、选择器机制和缓冲区,适合高并发场景。使用NIO涉及通道、选择器和事件处理,优点是高并发、资源利用率和可扩展性,但复杂度、错误处理和性能调优是挑战。开发者应根据需求选择是否使用NIO,并深入理解其原理。
|
25天前
|
JavaScript Java 测试技术
基于Java的网络办公系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络办公系统的设计与实现(源码+lw+部署文档+讲解等)
23 0
|
26天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
2月前
|
网络协议 算法 Java