日期:2014-05-19  浏览次数:20746 次

求文件读写高手
请问用什么方式把一个int(4位)整数写入文件,写入后文件的大小为4个字节,并且用文本查看器可以读出来数据。

我尝试了各种方法的各种编码去写入,要么就是一个字节,要么就是4个字节但是用文本查看器打开有乱码,特地请高手赐教!

------解决方案--------------------
探讨

引用:

你的需求根本不可能实现。。。

4字节整数(原文4位应该有误),其取值范围是 -2147483648 ~ 2147483647

所以如果要用人能直接看懂的方式存储,就必须有11个字节才行。

如果只允许用4个字节来保存,就只能用人看不懂的二进制方式存储。



有种方法写入后是一个字节,能看到数字,但是好像是以字符串的方式写入的。

我的……

------解决方案--------------------
文件都是以二进制形式保存在磁盘中的,windows下文本查看器用的是GBK编码进行查看文件的。
所以你必须先转成字符串(GBK), 而文件的存储大小与系统所采用的存储文件系统有关。
------解决方案--------------------
我想普及一下基本常识,这个问题关键根本不在于int的的范围能不能放下,顺便甩2楼脸!你是不是程序员?
一个int型到底占几个字节,这不取决于语言或是什么的,取决于CPU是机器字长
8位的CPU,8位等于1字节
16位的CPU,16位等于1个字节
以此类推
为什么呢,因为计算机中最小的单位就是bit!哪怕你要存再小的数据,比如你要存个int 1
在8位CPU里,就是0000-0001 在16位里就是00000000-00000001
前者占1个字节,后者占1个字,也就是2个字节。虽然都表示一个int型
8位CPU里,最大只能放 2^8次方,-255~255 LZ说要放4位数的int型
倒过来推,拿出你的计算机,输入9999,然后转成2进制是多少0010 0111 0000 1111
也就是说,其实我只需要2个字节就足够放这些数据了,既然楼主给了4个字节,为什么不能放?2楼
知道为什么教科书上说int = 4 个字节,因为现在32位的计算机普及了,32/8 = 4 明白?


楼主的关键问题在于什么!输入跟输出完全不是一码事!你用文本编辑器,去打开这个文件,文本编辑器,默认能看懂的都是字符串,你往里面写的是int,你往外面读的是String 能看懂就奇怪了!

就好比你用ISO-8859-1 去对于一个字符串编码,然后用UTF-8解码,你看到的可能一样吗?这只是个例子,极端情况下也可能一样!
总之,输入跟输出要保持一致

------解决方案--------------------
现在我写入一个int数据,4字节
Java code

public static void main(String[] args) {
        try {
            RandomAccessFile accessFile = new RandomAccessFile(
                    "D://chablis.txt", "rw");
            ByteBuffer buffer2 = accessFile.getChannel().map(
                    MapMode.READ_WRITE, 0, 4);
            buffer2.asIntBuffer().put(5421);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }