更新数据以记录每个字节数

时间:2014-10-17 10:36:04

标签: java android

我想将每个10kb文件的内容数据写入文件。它看起来像这样: enter image description here

我尝试了什么:

 FileInputStream is;
 FileOutputStream out;
 File input = new File(filePath);
 int fileLength = input.length();
 int len = 0;
    while (len < fileLength){
        len += is.read(buff);
        // write my data
        out.write(data, 0, data.length);
       // how to move is to read next 10kb???
    }

我想知道无论如何将光标阅读器移动到下一个字节数量?或者我错过了什么?

更新:感谢@DThought,这是我的实施:

    File input = new File(filePath);
    long fileLength = input.length();
    byte[] data;
    byte[] buff = new byte[data.length];
    long JUMP_LENGTH = 10 * 1024;
    RandomAccessFile raf = new RandomAccessFile(input, "rw");

    long step = JUMP_LENGTH + data.length;
    for (long i = 0; i < fileLength; i += step) {
        // read to buffer
        raf.seek(i);
        raf.read(buff);

        raf.seek(i); // make sure it move to correct place after reading
        raf.write(data);

    }

    raf.close();

它运作良好。

2 个答案:

答案 0 :(得分:2)

例如,您可以将空数组或空格写入该特定部分,因为您无法跳转到文件的特定内存而无法避免10KB

例如

    OutputStream os = new FileOutputStream(new File("D:/a.txt"));
    byte[] emptyByte=new byte[10*1024];
    Arrays.fill(emptyByte, " ".getBytes()[0]);//Empty array
    os.write(yourData,0,yourData.length-1);
    os.write(emptyByte,0,emptyByte.length-1);
    //Write after each data to leave space of 10KB

注意 我不知道它是如何为10KB 设置的,除此之外它只是一个例子,你可以使用它为你。我已经在文件的那一部分添加了空格。你可以根据你的要求实现它。我认为你不能直接跳转到特定的内存地址,但你可以用空数据填充它。


我想RandomAccessFile的{​​{3}}方法也可以按照DThought的建议为您提供帮助,但是从此文件的开头进行测量请注意。

答案 1 :(得分:2)

尝试使用http://developer.android.com/reference/java/io/RandomAccessFile.html RandomAccessFile而不是FileOutputStream。

这将使您能够寻求任意职位

byte[] data=new byte[1024];
RandomAccessFile file=new RandomAccessFile(new File("name"),"rw");
file.seek(10*1024);
file.write(data);