关于输入输出流的问题,是FileInputStream类的read方法的疑问,具体如下
先发一下完整程序:packagebog.ne.n;importjava.io.*;publicclassExample10_6{publicstaticvoidmain(...
先发一下完整程序: package bog.ne.n;
import java.io.*;
public class Example10_6 {
public static void main(String args[]){
char a[]="今晚10点发起总攻".toCharArray();
int n=0,m=0;
try{
File f=new File("secret.txt");
for(int i=0;i<a.length;i++){
a[i]=(char)(a[i]^'R');
}
FileWriter out=new FileWriter(f);
out.write(a,0,a.length);
out.close();
FileReader in=new FileReader(f);
char tom[]=new char[10];
System.out.println("密文");
while((n=in.read(tom,0,10))!=-1){
String s=new String(tom,0,n);
System.out.println(s);
}
}
catch(IOException e){
System.out.println("file read error");
}
}
} 我的疑惑在 while((n=in.read(tom,0,10))!=-1) 循环这一段,首先我想问的是执行一次read方法不一定是完全把文件的内容读取出来的吧,可能要进行几次read才读完文件的内容; 然后呢,就是只有当read方法的返回值不等于-1的时候才执行下面的循环体,可是(比如说这个例子吧,我假如它执行两次read方法才读取完文件的内容,那第二次调用read方法的时候,把8个中文剩下的几个中文读取出来了,可是此时也会返回一个-1给read方法,那么就不满足循环体的条件了 , 也就不会执行循环体的内容,也就不会打印第二次读取出来存放在数组中的字符了。好了我的问题就是大概这样,希望高手可以耐心看完!谢谢!希望有人帮我解决 展开
import java.io.*;
public class Example10_6 {
public static void main(String args[]){
char a[]="今晚10点发起总攻".toCharArray();
int n=0,m=0;
try{
File f=new File("secret.txt");
for(int i=0;i<a.length;i++){
a[i]=(char)(a[i]^'R');
}
FileWriter out=new FileWriter(f);
out.write(a,0,a.length);
out.close();
FileReader in=new FileReader(f);
char tom[]=new char[10];
System.out.println("密文");
while((n=in.read(tom,0,10))!=-1){
String s=new String(tom,0,n);
System.out.println(s);
}
}
catch(IOException e){
System.out.println("file read error");
}
}
} 我的疑惑在 while((n=in.read(tom,0,10))!=-1) 循环这一段,首先我想问的是执行一次read方法不一定是完全把文件的内容读取出来的吧,可能要进行几次read才读完文件的内容; 然后呢,就是只有当read方法的返回值不等于-1的时候才执行下面的循环体,可是(比如说这个例子吧,我假如它执行两次read方法才读取完文件的内容,那第二次调用read方法的时候,把8个中文剩下的几个中文读取出来了,可是此时也会返回一个-1给read方法,那么就不满足循环体的条件了 , 也就不会执行循环体的内容,也就不会打印第二次读取出来存放在数组中的字符了。好了我的问题就是大概这样,希望高手可以耐心看完!谢谢!希望有人帮我解决 展开
2个回答
展开全部
LZ 你要看一下read(byte[],int,int)的定义才行了。
int read(byte[] b, int off, int len)
Reads up to len bytes of data from this input stream into an array of bytes.
read
public int read(byte[] b,
int off,
int len)
throws IOException
Reads up to len bytes of data from this input stream into an array of bytes. If len is not zero, the method blocks until some input is available; otherwise, no bytes are read and 0 is returned.
int read(byte[] b, int off, int len)
Reads up to len bytes of data from this input stream into an array of bytes.
read
public int read(byte[] b,
int off,
int len)
throws IOException
Reads up to len bytes of data from this input stream into an array of bytes. If len is not zero, the method blocks until some input is available; otherwise, no bytes are read and 0 is returned.
追问
你这些英文的句子我大多都看不懂。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询