in src/main/java/com/epam/parso/impl/SasFileParser.java [318:384]
private void processSasFileHeader(String builderEncoding) throws IOException {
int align1 = 0;
int align2 = 0;
Long[] offsetForAlign = {ALIGN_1_OFFSET, ALIGN_2_OFFSET};
Integer[] lengthForAlign = {ALIGN_1_LENGTH, ALIGN_2_LENGTH};
List<byte[]> varsForAlign = getBytesFromFile(offsetForAlign, lengthForAlign);
if (varsForAlign.get(0)[0] == U64_BYTE_CHECKER_VALUE) {
align2 = ALIGN_2_VALUE;
sasFileProperties.setU64(true);
}
if (varsForAlign.get(1)[0] == ALIGN_1_CHECKER_VALUE) {
align1 = ALIGN_1_VALUE;
}
int totalAlign = align1 + align2;
Long[] offset = {ENDIANNESS_OFFSET, ENCODING_OFFSET, DATASET_OFFSET, FILE_TYPE_OFFSET,
DATE_CREATED_OFFSET + align1, DATE_MODIFIED_OFFSET + align1, HEADER_SIZE_OFFSET + align1,
PAGE_SIZE_OFFSET + align1, PAGE_COUNT_OFFSET + align1, SAS_RELEASE_OFFSET + totalAlign,
SAS_SERVER_TYPE_OFFSET + totalAlign, OS_VERSION_NUMBER_OFFSET + totalAlign,
OS_MAKER_OFFSET + totalAlign, OS_NAME_OFFSET + totalAlign};
Integer[] length = {ENDIANNESS_LENGTH, ENCODING_LENGTH, DATASET_LENGTH, FILE_TYPE_LENGTH, DATE_CREATED_LENGTH,
DATE_MODIFIED_LENGTH, HEADER_SIZE_LENGTH, PAGE_SIZE_LENGTH, PAGE_COUNT_LENGTH + align2,
SAS_RELEASE_LENGTH, SAS_SERVER_TYPE_LENGTH, OS_VERSION_NUMBER_LENGTH, OS_MAKER_LENGTH, OS_NAME_LENGTH};
List<byte[]> vars = getBytesFromFile(offset, length);
sasFileProperties.setEndianness(vars.get(0)[0]);
if (!isSasFileValid()) {
throw new IOException(FILE_NOT_VALID);
}
String fileEncoding = SAS_CHARACTER_ENCODINGS.get(vars.get(1)[0]);
if (builderEncoding != null) {
this.encoding = builderEncoding;
} else {
this.encoding = fileEncoding != null ? fileEncoding : this.encoding;
}
sasFileProperties.setEncoding(fileEncoding);
sasFileProperties.setName(bytesToString(vars.get(2)).trim());
sasFileProperties.setFileType(bytesToString(vars.get(3)).trim());
sasFileProperties.setDateCreated(bytesToDateTime(vars.get(4)));
sasFileProperties.setDateModified(bytesToDateTime(vars.get(5)));
sasFileProperties.setHeaderLength(bytesToInt(vars.get(6)));
int pageLength = bytesToInt(vars.get(7));
if (pageLength > MAX_PAGE_LENGTH) {
throw new IOException("Page limit ("
+ pageLength + ") exceeds maximum: " + MAX_PAGE_LENGTH);
}
sasFileProperties.setPageLength(pageLength);
sasFileProperties.setPageCount(bytesToLong(vars.get(8)));
sasFileProperties.setSasRelease(bytesToString(vars.get(9)).trim());
sasFileProperties.setServerType(bytesToString(vars.get(10)).trim());
sasFileProperties.setOsType(bytesToString(vars.get(11)).trim());
if (vars.get(13)[0] != 0) {
sasFileProperties.setOsName(bytesToString(vars.get(13)).trim());
} else {
sasFileProperties.setOsName(bytesToString(vars.get(12)).trim());
}
if (sasFileStream != null) {
skipBytes(sasFileProperties.getHeaderLength() - currentFilePosition);
currentFilePosition = 0;
}
}