高手们帮我看小这个java小程序怎么改!!

来源:百度知道 编辑:UC知道 时间:2024/09/24 12:19:08
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型存入的。用这个

你还是没有注意到括号后边那句话:(注意,一个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[]bytes={1,2,3,4,5,6,7,8,9,10};