本文整理汇总了C++中ZLInputStream::offset方法的典型用法代码示例。如果您正苦于以下问题:C++ ZLInputStream::offset方法的具体用法?C++ ZLInputStream::offset怎么用?C++ ZLInputStream::offset使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ZLInputStream
的用法示例。
在下文中一共展示了ZLInputStream::offset方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: readFrom
bool ZLZipHeader::readFrom(ZLInputStream &stream) {
size_t startOffset = stream.offset();
Signature = readLong(stream);
switch (Signature) {
default:
return false;
case SignatureLocalFile:
Version = readShort(stream);
Flags = readShort(stream);
CompressionMethod = readShort(stream);
ModificationTime = readShort(stream);
ModificationDate = readShort(stream);
CRC32 = readLong(stream);
CompressedSize = readLong(stream);
UncompressedSize = readLong(stream);
if (CompressionMethod == 0 && CompressedSize != UncompressedSize) {
ZLLogger::Instance().println("zip", "Different compressed & uncompressed size for stored entry; the uncompressed one will be used.");
CompressedSize = UncompressedSize;
}
NameLength = readShort(stream);
ExtraLength = readShort(stream);
return stream.offset() == startOffset + 30 && NameLength != 0;
case SignatureData:
CRC32 = readLong(stream);
CompressedSize = readLong(stream);
UncompressedSize = readLong(stream);
NameLength = 0;
ExtraLength = 0;
return stream.offset() == startOffset + 16;
}
}
示例2: readFrom
bool ZLZipHeader::readFrom(ZLInputStream &stream) {
size_t startOffset = stream.offset();
Signature = readLong(stream);
Version = readShort(stream);
Flags = readShort(stream);
CompressionMethod = readShort(stream);
ModificationTime = readShort(stream);
ModificationDate = readShort(stream);
CRC32 = readLong(stream);
CompressedSize = readLong(stream);
UncompressedSize = readLong(stream);
NameLength = readShort(stream);
ExtraLength = readShort(stream);
return (Signature == 0x04034B50) && (stream.offset() == startOffset + 30) && (NameLength != 0);
}
示例3: entryName
ZLZipEntryCache::ZLZipEntryCache(const std::string &containerName, ZLInputStream &containerStream) : myContainerName(containerName) {
//ZLLogger::Instance().println("ZipEntryCache", "creating cache for " + containerName);
myLastModifiedTime = ZLFile(containerName).lastModified();
if (!containerStream.open()) {
return;
}
ZLZipHeader header;
while (header.readFrom(containerStream)) {
Info *infoPtr = 0;
if (header.Signature == (unsigned long)ZLZipHeader::SignatureLocalFile) {
std::string entryName(header.NameLength, '\0');
if ((unsigned int)containerStream.read((char*)entryName.data(), header.NameLength) == header.NameLength) {
entryName = AndroidUtil::convertNonUtfString(entryName);
Info &info = myInfoMap[entryName];
info.Offset = containerStream.offset() + header.ExtraLength;
info.CompressionMethod = header.CompressionMethod;
info.CompressedSize = header.CompressedSize;
info.UncompressedSize = header.UncompressedSize;
infoPtr = &info;
}
}
ZLZipHeader::skipEntry(containerStream, header);
if (infoPtr != 0) {
infoPtr->UncompressedSize = header.UncompressedSize;
}
}
containerStream.close();
}
示例4: entryName
ZLZipEntryCache::ZLZipEntryCache(ZLInputStream &baseStream) {
if (!baseStream.open()) {
return;
}
ZLZipHeader header;
while (header.readFrom(baseStream)) {
Info *infoPtr = 0;
if (header.Signature == ZLZipHeader::SignatureLocalFile) {
std::string entryName(header.NameLength, '\0');
if ((unsigned int)baseStream.read((char*)entryName.data(), header.NameLength) == header.NameLength) {
Info &info = myInfoMap[entryName];
info.Offset = baseStream.offset() + header.ExtraLength;
info.CompressionMethod = header.CompressionMethod;
info.CompressedSize = header.CompressedSize;
info.UncompressedSize = header.UncompressedSize;
infoPtr = &info;
}
}
ZLZipHeader::skipEntry(baseStream, header);
if (infoPtr != 0) {
infoPtr->UncompressedSize = header.UncompressedSize;
}
}
baseStream.close();
}
示例5: read
bool ZLTarHeader::read(ZLInputStream &stream) {
size_t startOffset = stream.offset();
char fileName[101];
stream.read(fileName, 100);
if (fileName[0] == '\0') {
return false;
}
fileName[100] = '\0';
if (Name.empty()) {
Name = fileName;
}
stream.seek(24, false);
char fileSizeString[12];
stream.read(fileSizeString, 12);
Size = 0;
for (int i = 0; i < 12; ++i) {
if (!isdigit(fileSizeString[i])) {
break;
}
Size *= 8;
Size += fileSizeString[i] - '0';
}
stream.seek(20, false);
char linkFlag;
stream.read(&linkFlag, 1);
IsRegularFile = (linkFlag == '\0') || (linkFlag == '0');
stream.seek(355, false);
if (((linkFlag == 'L') || (linkFlag == 'K')) && (Name == "././@LongLink") && (Size < 10240)) {
Name.erase();
Name.append(Size - 1, '\0');
stream.read(const_cast<char*>(Name.data()), Size - 1);
const int skip = 512 - (Size & 0x1ff);
stream.seek(skip + 1, false);
return (stream.offset() == startOffset + Size + skip + 512) && read(stream);
} else {
DataOffset = stream.offset();
return DataOffset == startOffset + 512;
}
}
示例6: readFrom
bool ZLZipHeader::readFrom(ZLInputStream &stream) {
std::size_t startOffset = stream.offset();
Signature = readLong(stream);
switch (Signature) {
default:
return stream.offset() == startOffset + 4;
case SignatureCentralDirectory:
{
Version = readLong(stream);
Flags = readShort(stream);
CompressionMethod = readShort(stream);
ModificationTime = readShort(stream);
ModificationDate = readShort(stream);
CRC32 = readLong(stream);
CompressedSize = readLong(stream);
UncompressedSize = readLong(stream);
if (CompressionMethod == 0 && CompressedSize != UncompressedSize) {
ZLLogger::Instance().println("zip", "Different compressed & uncompressed size for stored entry; the uncompressed one will be used.");
CompressedSize = UncompressedSize;
}
NameLength = readShort(stream);
ExtraLength = readShort(stream);
const unsigned short toSkip = readShort(stream);
stream.seek(12 + NameLength + ExtraLength + toSkip, false);
return stream.offset() == startOffset + 42 + NameLength + ExtraLength + toSkip;
}
case SignatureLocalFile:
Version = readShort(stream);
Flags = readShort(stream);
CompressionMethod = readShort(stream);
ModificationTime = readShort(stream);
ModificationDate = readShort(stream);
CRC32 = readLong(stream);
CompressedSize = readLong(stream);
UncompressedSize = readLong(stream);
if (CompressionMethod == 0 && CompressedSize != UncompressedSize) {
ZLLogger::Instance().println("zip", "Different compressed & uncompressed size for stored entry; the uncompressed one will be used.");
CompressedSize = UncompressedSize;
}
NameLength = readShort(stream);
ExtraLength = readShort(stream);
return stream.offset() == startOffset + 30 && NameLength != 0;
case SignatureEndOfCentralDirectory:
{
stream.seek(16, false);
const unsigned short toSkip = readShort(stream);
stream.seek(toSkip, false);
UncompressedSize = 0;
return stream.offset() == startOffset + 18 + toSkip;
}
case SignatureData:
CRC32 = readLong(stream);
CompressedSize = readLong(stream);
UncompressedSize = readLong(stream);
NameLength = 0;
ExtraLength = 0;
return stream.offset() == startOffset + 16;
}
}
示例7: init
bool CHMFileInfo::init(ZLInputStream &stream) {
{
// header start
if (readString(stream, 4) != "ITSF") {
return false;
}
unsigned long version = readUnsignedDWord(stream);
// DWORD total length
// DWORD unknown
// DWORD timestamp
// DWORD language id
// 0x10 bytes 1st GUID
// 0x10 bytes 2nd GUID
// QWORD section 0 offset
// QWORD section 0 length
stream.seek(4 * 4 + 2 * 0x10 + 2 * 8, false);
unsigned long long sectionOffset1 = readUnsignedQWord(stream);
unsigned long long sectionLength1 = readUnsignedQWord(stream);
mySection0Offset = sectionOffset1 + sectionLength1;
// header end
// additional header data start
if (version > 2) {
mySection0Offset = readUnsignedQWord(stream);
}
// additional header data end
stream.seek(sectionOffset1, true);
// header section 1 start
// directory header start
if (readString(stream, 4) != "ITSP") {
return false;
}
// DWORD version
// DWORD length
// DWORD 0x000A
// DWORD chunk size
// DWORD density
// DWORD depth
// DWORD root chunk number
// DWORD first chunk number
// DWORD last chunk number
// DWORD -1
stream.seek(10 * 4, false);
unsigned long dirChunkNumber = readUnsignedDWord(stream);
// ...
stream.seek(36, false);
// header section 1 end
std::size_t nextOffset = stream.offset();
for (unsigned long i = 0; i < dirChunkNumber; ++i) {
nextOffset += 4096;
std::string header = readString(stream, 4);
if (header == "PMGL") {
unsigned long quickRefAreaSize = readUnsignedDWord(stream) % 4096;
stream.seek(12, false);
std::size_t startOffset = stream.offset();
std::size_t oldOffset = startOffset;
while (startOffset < nextOffset - quickRefAreaSize) {
int nameLength = readEncodedInteger(stream);
std::string name = readString(stream, nameLength);
int contentSection = readEncodedInteger(stream);
int offset = readEncodedInteger(stream);
int length = readEncodedInteger(stream);
if (name.substr(0, 2) != "::") {
name = ZLUnicodeUtil::toLower(name);
}
myRecords.insert(
std::make_pair(
name,
CHMFileInfo::RecordInfo(contentSection, offset, length)
)
);
startOffset = stream.offset();
if (oldOffset == startOffset) {
break;
}
oldOffset = startOffset;
}
} else if (header == "PMGI") {
unsigned long quickRefAreaSize = readUnsignedDWord(stream);
std::size_t startOffset = stream.offset();
std::size_t oldOffset = startOffset;
while (startOffset < nextOffset - quickRefAreaSize) {
int nameLength = readEncodedInteger(stream);
std::string name = readString(stream, nameLength);
// chunk number
readEncodedInteger(stream);
startOffset = stream.offset();
if (oldOffset == startOffset) {
break;
}
oldOffset = startOffset;
}
}
stream.seek(nextOffset, true);
//.........这里部分代码省略.........