java inputstream和outputstream_java input

java inputstream和outputstream_java input原文地址:http://www.zgljl2012.com/javaji-chu-inputstream-inputstreamreaderhe-bufferedreader/在Java中,上述三个类经常用于处理数据流,下面介绍一下三个类的不同之处以及各自的用法。InputStream:是所有字节输入流的超类,一般使用它的子类:FileInputStream等,它能输出字节流;…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在Java中,上述三个类经常用于处理数据流,下面介绍一下三个类的不同之处以及各自的用法。

  • InputStream : 是所有字节输入流的超类,一般使用它的子类:FileInputStream等,它能输出字节流;
  • InputStreamReader : 是字节流与字符流之间的桥梁,能将字节流输出为字符流,并且能为字节流指定字符集,可输出一个个的字符;
  • BufferedReader : 提供通用的缓冲方式文本读取,readLine读取一个文本行, 从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

下面有三个Demo(Demo访问百度主页获取字节流然后输出)来分别说明三个类的作用:


  • InputStream
package 数据流;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

public class Test_InputStream { 
   

    /** * 获取字节流 * @param url * @return */
    private String getStream(String url){
        //获取字节流
        InputStream in = null;
        String result = "";
        try {
            in = new URL(url).openStream();
            int tmp;
            while((tmp = in.read()) != -1){
                result += (char)tmp;
            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //输出字节流
        return result;
    }

    public static void main(String[] args){

        String URL = "http://www.baidu.com";
        Test_InputStream test = new Test_InputStream();
        System.out.println(test.getStream(URL));

    }
}

通过URL连接获取了InputStream流连接,然后通过read方法来一个字节一个字节的读取字节流并组合在一起(read方法返回-1则数据读取结束),最后以reasults返回。

输出如下:

60 33 68 79 67 84 89 80 69 32 104 116 109 108 62 60 33 45 45 83 84 65 84 ……

这就是字节流,每个数字都是一个字节(Byte,8位),所以如果读取英文的话,用字节流,然后用(char)强制转化一下就行了,但如果有中文等双字节语言或者说需要指定字符编码集的情况,就必须用到InputStreamReader将字节流转化为字符流了。


  • InputStreamReader
package 数据流;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class Test_InputStreamReader { 
   

    /* * 得到字符流前需先有字节流 */
    private String getStream(String url){
        try {
            //得到字节流
            InputStream in = new URL(url).openStream();
            //将字节流转化成字符流,并指定字符集
            InputStreamReader isr = new InputStreamReader(in,"UTF-8");
            String results = "";
            int tmp;
            while((tmp = isr.read()) != -1){
                results += (char)tmp;
            }
            return results;

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    /** * @param args */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String URL = "http://www.baidu.com";
        Test_InputStreamReader test = new Test_InputStreamReader();
        System.out.println(test.getStream(URL));
    }

}

先获取字节流,然后创建InputStreamReader将字节流转化成字符流,并指定其字符集为UTF-8,然后使用强制转化将read到的int字节转化为char型,此时已可以输出中文字符,并且可速度上看出,输出字符流比输出字节流要快。下面是结果的部分截图:
这里写图片描述


  • BufferedReader
package 数据流;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class Test_BufferedReader { 
   

    /* * 字节流——字符流——缓存输出的字符流 */
    private String getStream(String url){
        try {
            //得到字节流
            InputStream in = new URL(url).openStream();
            //将字节流转化成字符流,并指定字符集
            InputStreamReader isr = new InputStreamReader(in,"UTF-8");
            //将字符流以缓存的形式一行一行输出
            BufferedReader bf = new BufferedReader(isr); 
            String results = "";
            String newLine = "";
            while((newLine = bf.readLine()) != null){
                results += newLine+"\n";
            }
            return results;

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    /** * @param args */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String URL = "http://www.baidu.com";
        Test_BufferedReader test = new Test_BufferedReader();
        System.out.println(test.getStream(URL));
    }

}

获取字符流后,可直接缓存,然后从缓存区取出,这时的速度比InputStreamReader又将快上很多。输出结果同上。


  • 总结
    在读取网络数据流的时候,可以通过先用InputStream获取字节流、InputStreamReader将字节流转化成字符流、BufferedReader将字符流以缓存形式输出的方式来快速获取网络数据流。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189254.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js判断是否包含指定字符串_js正则表达式匹配字符串

    js判断是否包含指定字符串_js正则表达式匹配字符串前言:有时候,我们在js中需要判断一个字符串中,是不是包含某个字符。可以采用以下方法进行判断。String对象的方法方法一:indexOf()(推荐)varstr=”123″;console.log(str.indexOf(“3”)!=-1);//trueindexOf()方法可返回某个指定的字符串值,在首次出现的位置。如果要检索的字符串值没有出现,则改方法返回-1。方法二:search()…

    2022年10月7日
    3
  • Cover Letter实用指南

    Cover Letter实用指南1、什么是CoverLetter?指的是投稿信2、coverletter的内容主要包括那些?应该简述所投稿件的核心内容、主要发现和意义,拟投期刊,对稿件处理有无特殊要求等(如“nottoreview”list)。另外,请附上主要作者的中文姓名、通讯地址、电话、传真和e-mail地址。此外有的杂志要求推荐几位审稿人及其联系方式。以及谁已经阅读过该文(当然是牛人)。

    2022年5月1日
    53
  • 关于垃圾回收CollectGarbage()的使用

    网络上流传的关于JS释放内存的方式~大概就是只说过。将变量使用以后设置为null,但是IE的GC是当鼠标点击最小化按钮时发生~~也就是说我们从程序上看已经释放了内存其实之前更本没有释放~~~研究jsvm的时候,发现js.lang.System里面定义了gc()方法System.gc=function(){  if(System.isIeBrowser())  {…

    2022年4月7日
    62
  • 缓冲区溢出流程

    缓冲区溢出流程缓冲区溢出流程一、ImmunityDebugger最好以管理员的身份运行Innunitydebugger通常有两种方法可以使用ImmunityDebugger来调试应用程序:确保应用

    2022年7月3日
    39
  • 用qrcode生成二维码_js生成带logo的二维码微信

    用qrcode生成二维码_js生成带logo的二维码微信用js写二维码

    2022年10月17日
    3
  • 关于python中lambda函数的描述_Python全局变量

    关于python中lambda函数的描述_Python全局变量PythonLambda表达式

    2022年10月9日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号