高手们帮我看小这个java小程序怎么改!!
importjava.io.*;publicclassNumber3{/*编写一个Java应用程序,利用RandomAccessFile类,把几个int型整数(1,2,3...
import java.io.*;
public class Number3 {
/*编写一个Java应用程序,利用RandomAccessFile类,
把几个int型整数(1,2,3,4,5,6,7,8,9,10)写入到一个名字为tom.dat文件中,
然后按相反顺序读出这些数据并显示在屏幕上。(注意,一个int型数据占4个字节)*/
public static void main(String[] args) {
int[]bytes={1,2,3,4,5,6,7,8,9,10};
try {
RandomAccessFile r=new RandomAccessFile("c:\\a.txt","rw");
for(int i=0;i<bytes.length;i++){
r.writeChars(bytes[i]+"");
}
long p = r.getFilePointer();
for(int i=1;i<11;i++){
//System.out.println(p);
r.seek(p-i*2);
System.out.print(r.readChar());}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这样的输出结果是 0198765432 我怎么保证10 不被分成01输出????
我刚申请的就20分。。。希望能得到答案!
【要用skipBytes,这才是相对定位,按字节来读,每次4个,所以就不会把10分开了】
我觉得很对,可是我之前是按char型存入的。用这个skipBytes总会出异常。。。能不能详细的帮我改下!! 展开
public class Number3 {
/*编写一个Java应用程序,利用RandomAccessFile类,
把几个int型整数(1,2,3,4,5,6,7,8,9,10)写入到一个名字为tom.dat文件中,
然后按相反顺序读出这些数据并显示在屏幕上。(注意,一个int型数据占4个字节)*/
public static void main(String[] args) {
int[]bytes={1,2,3,4,5,6,7,8,9,10};
try {
RandomAccessFile r=new RandomAccessFile("c:\\a.txt","rw");
for(int i=0;i<bytes.length;i++){
r.writeChars(bytes[i]+"");
}
long p = r.getFilePointer();
for(int i=1;i<11;i++){
//System.out.println(p);
r.seek(p-i*2);
System.out.print(r.readChar());}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这样的输出结果是 0198765432 我怎么保证10 不被分成01输出????
我刚申请的就20分。。。希望能得到答案!
【要用skipBytes,这才是相对定位,按字节来读,每次4个,所以就不会把10分开了】
我觉得很对,可是我之前是按char型存入的。用这个skipBytes总会出异常。。。能不能详细的帮我改下!! 展开
3个回答
展开全部
你还是没有注意到括号后边那句话:(注意,一个int型数据占4个字节)
为什么告诉你一个int型占四个字节,你要是把10分成1和0了,还是按字节读的么?
所以别用seek(),它是绝对定位
要用skipBytes,这才是相对定位,按字节来读,每次4个,所以就不会把10分开了
程序你自己改改吧
授之以鱼不如授之以渔,还是给你个思路:
你可塌局凳以这样,定义一个二维数组,分别把1-10转为字节型的放倒书数组里,然后通过你的指针定位到最后团旅四个,在转回int,指针在前移,自己想想,不难的,自腊搏己写总比我写出来给你看的好
具体的转换可以参考
1. public byte[] intToByte(int i) {
2. byte[] bt = new byte[4];
3. bt[0] = (byte) (0xff & i);
4. bt[1] = (byte) ((0xff00 & i) >> 8);
5. bt[2] = (byte) ((0xff0000 & i) >> 16);
6. bt[3] = (byte) ((0xff000000 & i) >> 24);
7. return bt;
8. }
9. public static int bytesToInt(byte[] bytes) {
10. int num = bytes[0] & 0xFF;
11. num |= ((bytes[1] << 8) & 0xFF00);
12. num |= ((bytes[2] << 16) & 0xFF0000);
13. num |= ((bytes[3] << 24) & 0xFF000000);
14. return num;
15. }
为什么告诉你一个int型占四个字节,你要是把10分成1和0了,还是按字节读的么?
所以别用seek(),它是绝对定位
要用skipBytes,这才是相对定位,按字节来读,每次4个,所以就不会把10分开了
程序你自己改改吧
授之以鱼不如授之以渔,还是给你个思路:
你可塌局凳以这样,定义一个二维数组,分别把1-10转为字节型的放倒书数组里,然后通过你的指针定位到最后团旅四个,在转回int,指针在前移,自己想想,不难的,自腊搏己写总比我写出来给你看的好
具体的转换可以参考
1. public byte[] intToByte(int i) {
2. byte[] bt = new byte[4];
3. bt[0] = (byte) (0xff & i);
4. bt[1] = (byte) ((0xff00 & i) >> 8);
5. bt[2] = (byte) ((0xff0000 & i) >> 16);
6. bt[3] = (byte) ((0xff000000 & i) >> 24);
7. return bt;
8. }
9. public static int bytesToInt(byte[] bytes) {
10. int num = bytes[0] & 0xFF;
11. num |= ((bytes[1] << 8) & 0xFF00);
12. num |= ((bytes[2] << 16) & 0xFF0000);
13. num |= ((bytes[3] << 24) & 0xFF000000);
14. return num;
15. }
展开全部
int[]bytes={1,2,3,4,5,6,7,8,9,10};
try {
RandomAccessFile r=new RandomAccessFile("谈慧c:\\a.txt","rw"含激答铅槐);
for(int item:bytes) r.writeInt(item);
long p = r.getFilePointer();
for(int i=(int)p;i>0;i=i-4){
r.seek(i-4);
System.out.print(r.readInt());
}
try {
RandomAccessFile r=new RandomAccessFile("谈慧c:\\a.txt","rw"含激答铅槐);
for(int item:bytes) r.writeInt(item);
long p = r.getFilePointer();
for(int i=(int)p;i>0;i=i-4){
r.seek(i-4);
System.out.print(r.readInt());
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你输出到文件中时根本没有加分隔符,现在不用说颤汪宴计算茄银机往回读的时候会把0和1分开,就是你让另一个人读12345678910这样一串数他也不知道到底是10还是1和0啊,唯一的办法就是加上分隔符,如1,2,3,4,5,6,7,8,9,10这样陵仿就不会存在歧义了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询