String与InputStream相互转换

1.String to InputStream

String str = "String与InputStream相互转换";

InputStream   in_nocode   =   new   ByteArrayInputStream(str.getBytes());  
InputStream   in_withcode   =   new   ByteArrayInputStream(str.getBytes("UTF-8"));  

 

 

2.InputStream to String

    这里提供几个方法。

方法1:

  public String convertStreamToString(InputStream is) {   

   BufferedReader reader = new BufferedReader(new InputStreamReader(is));   

        StringBuilder sb = new StringBuilder();   

    

        String line = null;   

        try {   

            while ((line = reader.readLine()) != null) {   

                sb.append(line + "/n");   

            }   

        } catch (IOException e) {   

            e.printStackTrace();   

        } finally {   

            try {   

                is.close();   

            } catch (IOException e) {   

                e.printStackTrace();   

            }   

        }   

    

        return sb.toString();   

    }   

 

方法2:

public   String   inputStream2String   (InputStream   in)   throws   IOException   {
        StringBuffer   out   =   new   StringBuffer();
        byte[]   b   =   new   byte[4096];
        for   (int   n;   (n   =   in.read(b))   !=   -1;)   {
                out.append(new   String(b,   0,   n));
        }
        return   out.toString();

方法3:
public   static   String   inputStream2String(InputStream   is)   throws   IOException{
        ByteArrayOutputStream   baos   =   new   ByteArrayOutputStream();
        int   i=-1;
        while((i=is.read())!=-1){
        baos.write(i);
        }
       return   baos.toString();
}


 

`FileReader`和`InputStream`都是在Java中用于读取文件的不同方式。 `FileReader`是针对字符流的,它直接从磁盘上的文件读取文本内容,并将其转换成字符序列,适合于处理文本文件,比如`.txt`或`.csv`等。当你需要读取整个文件作为一系列字符的时候,`FileReader`就很有用了,因为它支持按行读取。 而`InputStream`则是一个字节流,它适用于读取任何类型的二进制文件,包括图片、音频、视频等非文本文件。如果你不确定文件的内容格式,或者需要处理二进制数据,`InputStream`是一个通用的选择,因为它是基于底层操作系统API设计的,可以处理各种不同的输入源。 要将它们相互转换,通常是在需要处理二进制文件但是又希望按照字符流处理的情况。例如,如果已经得到了一个`InputStream`,想要读取其文本内容,可以先通过`InputStream`创建一个`InputStreamReader`,然后再传递给`FileReader`: ```java try (InputStream in = ...; BufferedReader br = new BufferedReader(new InputStreamReader(in))) { String line; while ((line = br.readLine()) != null) { // process each line as a string } } catch (IOException e) { e.printStackTrace(); } ``` 这里我们使用了缓冲区读取器(BufferedReader),它可以提高读取效率。 反之,如果你想从文件系统获取`InputStream`,可以这样做: ```java try (FileInputStream fis = new FileInputStream("file.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))) { // read from the character stream } catch (IOException e) { e.printStackTrace(); } ``` 在这里,`FileInputStream`是从`FileReader`派生出来的,但接收`InputStream`,而`StandardCharsets.UTF_8`用于指定字符编码。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值