java IO 里面的 read() 方法

import java.io.*;
public class Test1 {
public static void main(String[] args) {
try {
FileInputStream in = new FileInputStream("f:/test/dat.java");
//BufferedInputStream buf= new BufferedInputStream(in);
System.out.println(in.read()); //这句话不懂
}
catch(FileNotFoundException y){System.out.print("出错1");}
catch (IOException e1){System.out.print("出错2");}
}
}

dat内容:234654646987fdsarefw我是到我1234654646987fdsarefw我是到我

运行结果是50
read() 这个方法是读取一个字节。in.read() 不是应该读取文件dat里面的第一个字节2吗?怎么变成50了?

    java.io.DataInputStream.readChar() 方法读取两个字节,并返回一个字符值。

    以下是java.io.DataInputStream.readChar()方法的声明:

    public final char readChar()

    此方法返回读取的char值。

    下面的示例演示java.io.DataInputStream.readChar()方法的用法。


    public class DataInputStreamDemo {
       public static void main(String[] args) throws IOException {
          
          InputStream is = null;
          DataInputStream dis = null;
          FileOutputStream fos = null;
          DataOutputStream dos = null;
          byte[] buf = {65,66,67,68,69,70};
          
          try{
             // create file output stream
             fos = new FileOutputStream("c:\\test.txt");
             
             // create data output stream
             dos = new DataOutputStream(fos);
             
             // for each byte in the buffer
             for (byte b:buf)
             {
                // write character to the dos
                dos.writeChar(b);
             }
             
             // force bytes to the underlying stream
             dos.flush();
             
             // create file input stream
             is = new FileInputStream("c:\\test.txt");
             
             // create new data input stream
             dis = new DataInputStream(is);
             
             // read till end of the stream
             while(dis.available()>0)
             {
                // read character
                char c = dis.readChar();
                
                // print
                System.out.print(c);
             }
          }catch(Exception e){
             
             e.printStackTrace();
          }finally{
             
             // releases all system resources from the streams
             if(is!=null)
                is.close();
             if(dos!=null)
                is.close();
             if(dis!=null)
                dis.close();
             if(fos!=null)
                fos.close();
          }
       }
    }

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-06
in.read()方法的确是读取一个字节,但是,它返回的是int类型,不是char类型,所以,在这里你就需要转换为char了。那么,字符2的ascii码是多少?对了,是50,所以你输出就是50了。如果你要输出为2,这就简单了,(char)in.read() 把它转换成char型不就得了吗?
OK!如还有问题,继续本回答被提问者采纳
第2个回答  2012-11-06
read()方法读取的是字节的个数,它返回的是一个int类型数据,是读取到的字节的个数,当in.read()方法返回的是-1时,证明读完了,例如:
byte tom[ ] =new byte[10];
try{
FileInputStream in = new FileInputStream("f:/test/dat.java");
while((b=in.read(tom,0,18))!=-1){
String s=new String(tom,0,b);//得到数组tom中从0到b的字节,因为b是实际读取到的字节个数
System.out.println(s);
}
in.close();
}catch(IOException e){
e.printStackTrace();
}
这样就能输出读取的全部内容
第3个回答  2012-11-06
你可以看下三楼的答案
第4个回答  2012-11-06
你应该记错了 in.read()是读取第一个字节 不信你试试 不论你后面有多少,是多少,都只会读取第一个字节

关于java.io包中,FileInputStream 的read()方法
public int read() throws IOException 从此输入流中读取一个数据字节。如果没有输入可用,则此方法将阻塞。指定者:类 InputStream 中的 read 返回:下一个数据字节;如果已到达文件末尾,则返回 -1。抛出:IOException - 如果发生 I\/O 错误。个人理解:该方法将输入按字节读入,当读取到字节时就返回...

java流的read方法返回值怎么来的?
inputstream的read函数 在很多地方都有用到 比如键盘输入或文件流输入或socket输入 read的返回值 并不是真正得到的数据,而是得到的数据的长度 你每次会希望读入一定的长度,比如你想读10个byte 如果剩余的byte数足够,将会读满所需要的字节数,如果剩余的字节数不够 将会返回一个小于你所读的数 如果读到...

java io怎么读取文件并输出到控制台上?
解决方法:int len = fis.read(); read 方法加入参数bys,这样才能把fis的内容注入bys里面。顺便说下,FileInputStream不能正确输出中文,因为这个是按字节输出的,每个中文站2个字节,会出现乱码。下面给出正确代码截图,和运行截图(图2 、3)...

我的世界js插件,java读文件,var c=new java.io.FileInputStrea
read()这个方法的意思是读取一个字节,所以你如果想读去完,必须要加个while循环,判断是否读取到末尾,如果read()方法返回-1表明读取到末尾了

在Java中的io流中,read读取文件时,读取完了没有了返回-1,(为什么不...
返回-1是对的啊,read字节数组的时候,读到最后一个没有的时候就数组越界异常,-1就是不在数组的索引值范围内,所以开发人员就将它作为read完成后的返回值

6 请简述java io中stream流和read流的区别,并分别列举2个常用的strea...
read(byte[]) 将当前输入流中 b.length 个字节数据读到一个字节数组中。 read(byte[], int, int) 将输入流中 len 个字节数据读入一个字节数组中。 1.4 PipedInputStream :实现了 pipe 的概念,主要在线程中使用 . 管道输入流是指一个通讯管道的接收端。 一个线程通过管道输出流发送数据,而另一个线程通过管...

java中网络流的read方法,什么时候会返回
itjobjava老师讲过流的末尾会返回-1, 像你这种情况就是当对方将socket的输出流关闭后, 你将对方的输出都读完后,再读下一个字节就会返回-1.如果是用阻塞IO的话,它会选择阻塞,不会返回-1,直到timeout抛出异常。

用JAVA的IO流里的哪个类效率最高
Java中IO流分成两大类,一种是输入流,所有的输入流都直接或间接继承自InputStream抽象类,输入流作为数据的来源,我们可以通过输入流的read方法读取字节数据;另一种是输出流,所有的输出流都直接或间接继承自OutputStream抽象类,输出流接收数据,可以通过write方法写入字节数据。Java的IO流类中,大部分的...

一个java.io.Reader 怎么转换成 string
调用 方法 int read()Reads a single character.int read(char[] cbuf)Reads characters into an array.abstract int read(char[] cbuf,int off,int len)Reads characters into a portion of an array.int read(CharBuffer target)Attempts to read characters into the specified character buffer.得...

Java中对文件进行读写操作的基本类是什么?
Java.io包中包括许多类提供许多有关文件的各个方面操作。\\x0d\\x0a1 输入输出抽象基类InputStream\/OutputStream ,实现文件内容操作的基本功能函数read()、 write()、close()、skip()等;一般都是创建出其派生类对象(完成指定的特殊功能)来实现文件读写。在文件读写的编程过程中主要应该注意异常处理...

相似回答