首页 > 手机 > Android Studio的InputStream类里的read方法

Android Studio的InputStream类里的read方法

手机 2023-04-28

InputStream的read方法是什么?

InputStream的read方法:

  1. public abstract int read() throws IOException

  2. 从(来源)输入流中(读取的内容)读取数据的下一个字节到(去处)java程序内部中

  3. 返回值为0到255的int类型的值,返回值为字符的ACSII值(如a就返回97,n就返回110).

  4. 如果没有可用的字节,因为已经到达流的末尾,-1返回的值

  5. 运行一次只读一个字节,所以经常与while((len = inputstream.read()) != -1)一起使用

  6. read(byte [] b )

  7. publicintread(byte[]b) throws IOException

  8. 从(来源)输入流中(读取内容)读取的一定数量字节数,并将它们存储到(去处)缓冲区数组b中

  9. 返回值为实际读取的字节数

  10. 运行一次读取一定的数量的字节数.java会尽可能的读取b个字节,但也有可能读取少于b的字节数.至少读取一个字节

  11. 第一个字节存储读入元素b[0],下一个b[1],等等。读取的字节数是最多等于b的长度。

  12. 如果没有可用的字节,因为已经到达流的末尾,-1返回的值

  13. 如果b.length==0,则返回0,read( byte [] b , int off , int len)

  14. publicintread(byte[]b, intoff, intlen, throws IOException)

  15. 读取len字节的数据从输入流到一个字节数组。

  16. 试图读取多达len字节,但可能读取到少于len字节。返回实际读取的字节数为整数。

  17. 第一个字节存储读入元素b[off],下一个b[off+1],等等。读取的字节数是最多等于len。k被读取的字节数,这些字节将存储在元素通过b[off+k-1]b[off],离开元素通过b[off+len-1]b[off+k]未受影响。

  18. read(byte[]b)就是相当于read(byte [] b , 0 , b.length).所以两者差不多.性质一样。

InputStream简介:


    InputStream的作用是标志那些从不同数据起源产生输入的类。这些数据起源包括(每个都有一个相关的InputStream子类)。

    InputStream的使用方法:

    读取内存

    现在String s2里面已经有一个完整的文件了。因此这部分程序要用它去创建一个

    StringReader。然后用(StringReader的)read( )方法把字符读出来,再送到控制台上去。

    注意,read( )会把读出来的byte当作int,所以要想正常打印的话,你得先把它们转换成

    char。

InputStream read()方法的使用

两种写法是一样的。

read()方法返回读入缓冲区的字节数,如果数据读完了就返回-1

第一种是将read()的返回值存如read变量里,第二种就是直接获取read()方法的值。

在第一种,因为没有给read赋值,得不到read()返回的字节数,所以read始终不等于-1,当然就无限循环了。

第一种仅仅是比第二种多引入一个read变量而已。


其实就和下面这两段代码一样,没有任何区别

ints=0;
while(s<10){
s++;
}
ints=0;
inti=1;
while(s<10){
s+=i;
}

如何打断InputStream中的read方法

可以先用available()方法判断可以读取多少内容,再读取。这样避免read()方法发生阻塞。


例:

publicvoidtest(InputStreamin){
byte[]bs=newbyte[1024];
while(true){
try{
intavailable=in.available();//可读取多少字节内容
if(available==0){//没有可读取内容则退出
break;
}else{//读取内容并输出
in.read(bs,0,available);
System.out.print(newString(bs,0,available));
}
Thread.currentThread().sleep(200);//睡眠一段时间
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}

available()的说明有一段话,很迎合你现在的问题:

Firstly, the guarantee is "without blocking for more input" rather than
"without blocking": a read may still block waiting for I/O to complete— the
guarantee is merely that it won't have to wait indefinitely for data to be
written. The result of this method should not be used as a license to do I/O on
a thread that shouldn't be blocked.

java InputStream类中read()方法的返回的问题

read方法是读取的字节流,也就是每次只能读取一个字节,如果是汉字的话,肯定会出现乱码,此时必须用readline方法来整行读取,大大的提高了读取效率。 可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。 BufferedReader bre = null; try { String file = "D:/test/test.txt"; bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流 while ((str = bre.readLine())!= nu

10分求解InputStream 的read()方法的使用方法

你调用的这个read方法返回的是输入流中的字符的字符集编码,你输入9,方法返回9的编码57 强制转换为char就可以,是因为这样做,编译器会通过字符集编码找到该编码对应的字符然后强制转换

标签:inputstream read 信息技术 编程 编程语言

大明白知识网 Copyright © 2020-2022 www.wangpan131.com. Some Rights Reserved. 京ICP备11019930号-18