private void Write(int sectorNumber, byte[] data, int length) { _file.seek(sectorNumber * SectorBytes); _file.writeInt(length + 1); // chunk length _file.writeByte(VersionDeflate); // chunk version number _file.write(data, 0, length); // chunk data }
private void write(int i, byte[] abyte0, int j) { debugln((new StringBuilder()).append(" ").append(i).toString()); dataFile.seek(i * 4096); dataFile.writeInt(j + 1); dataFile.writeByte(2); dataFile.write(abyte0, 0, j); }
protected internal virtual void writeToc() { if (tocDirty) { try { tocFile.seek(0); tocFile.writeInt(NumSectors); foreach (int?sectorNumber in toc.Keys) { int?bufferedSectorNumber = toc[sectorNumber]; tocFile.writeInt(sectorNumber.Value); tocFile.writeInt(bufferedSectorNumber.Value); } tocDirty = false; } catch (IOException e) { Console.WriteLine("writeToc", e); } } }
public RegionFile(File path) { _offsets = new int[SectorInts]; _chunkTimeStamps = new int[SectorInts]; _fileName = path; _sizeDelta = 0; try { if (path.exists()) { LastModified = path.lastModified(); } _file = new RandomAccessFile(path, "rw"); if (_file.length() < SectorBytes) { // we need to write the chunk offset table for (int i = 0; i < SectorInts; ++i) { _file.writeInt(0); } // write another sector for the timestamp info for (int i = 0; i < SectorInts; ++i) { _file.writeInt(0); } _sizeDelta += SectorBytes * 2; } if ((_file.length() & 0xfff) != 0) { // the file size is not a multiple of 4KB, grow it for (int i = 0; i < (_file.length() & 0xfff); ++i) { _file.write(0); } } // set up the available sector map int nSectors = (int)_file.length() / SectorBytes; _sectorFree = new List <bool>(nSectors); for (int i = 0; i < nSectors; ++i) { _sectorFree.Add(true); } _sectorFree[0] = false; // chunk offset table _sectorFree[1] = false; // for the last modified info _file.seek(0); for (int i = 0; i < SectorInts; ++i) { int offset = _file.readInt(); _offsets[i] = offset; if (offset == 0 || (offset >> 8) + (offset & 0xFF) > _sectorFree.Count) { continue; } for (int sectorNum = 0; sectorNum < (offset & 0xFF); ++sectorNum) { _sectorFree[(offset >> 8) + sectorNum] = false; } } for (int i = 0; i < SectorInts; i++) { int lastModValue = _file.readInt(); _chunkTimeStamps[i] = lastModValue; } } catch (IOException e) { Console.WriteLine(e.ToString()); } }
public RegionFile(File file) { lastModified = 0L; fileName = file; debugln((new StringBuilder()).append("REGION LOAD ").append(fileName).toString()); sizeDelta = 0; try { if (file.exists()) { lastModified = file.lastModified(); } dataFile = new RandomAccessFile(file, "rw"); if (dataFile.length() < 4096L) { for (int i = 0; i < 1024; i++) { dataFile.writeInt(0); } for (int j = 0; j < 1024; j++) { dataFile.writeInt(0); } sizeDelta += 8192; } if ((dataFile.length() & 4095L) != 0L) { for (int k = 0; k < (dataFile.length() & 4095L); k++) { dataFile.write(0); } } int l = (int)dataFile.length() / 4096; sectorFree = new ArrayList(l); for (int i1 = 0; i1 < l; i1++) { sectorFree.add(Boolean.valueOf(true)); } sectorFree.set(0, Boolean.valueOf(false)); sectorFree.set(1, Boolean.valueOf(false)); dataFile.seek(0L); for (int j1 = 0; j1 < 1024; j1++) { int l1 = dataFile.readInt(); offsets[j1] = l1; if (l1 == 0 || (l1 >> 8) + (l1 & 0xff) > sectorFree.size()) { continue; } for (int j2 = 0; j2 < (l1 & 0xff); j2++) { sectorFree.set((l1 >> 8) + j2, Boolean.valueOf(false)); } } for (int k1 = 0; k1 < 1024; k1++) { int i2 = dataFile.readInt(); chunkTimestamps[k1] = i2; } } catch (IOException ioexception) { ioexception.printStackTrace(); } }