CSJ2K.j2k.util.CodestreamManipulator.readAndBuffer C# (CSharp) Метод

readAndBuffer() приватный Метод

This method reads and buffers the tile headers, packet headers and packet data.
If an I/O error ocurred. /// ///
private readAndBuffer ( BufferedRandomAccessFile fi ) : void
fi CSJ2K.j2k.io.BufferedRandomAccessFile The file to read the headers and data from /// ///
Результат void
        private void readAndBuffer(BufferedRandomAccessFile fi)
        {
            int p, prem, length, t, markIndex;

            // Buffer main header
            fi.seek(0);
            length = ((System.Int32) positions[0]) - 2;
            mainHeader = new byte[length];
            fi.readFully(mainHeader, 0, length);
            markIndex = 0;

            for (t = 0; t < nt; t++)
            {
                prem = ppt[t];

                packetHeaders[t] = new byte[prem][];
                packetData[t] = new byte[prem][];
                sopMarkSeg[t] = new byte[prem][];

                // Read tile header
                length = positions[markIndex + 1] - positions[markIndex];
                tileHeaders[t] = new byte[length];
                fi.readFully(tileHeaders[t], 0, length);
                markIndex++;

                for (p = 0; p < prem; p++)
                {
                    // Read packet header
                    length = positions[markIndex + 1] - positions[markIndex];

                    if (tempSop)
                    {
                        // SOP marker is skipped
                        length -= CSJ2K.j2k.codestream.Markers.SOP_LENGTH;
                        fi.skipBytes(CSJ2K.j2k.codestream.Markers.SOP_LENGTH);
                    }
                    else
                    {
                        // SOP marker is read and buffered
                        length -= CSJ2K.j2k.codestream.Markers.SOP_LENGTH;
                        sopMarkSeg[t][p] = new byte[CSJ2K.j2k.codestream.Markers.SOP_LENGTH];
                        fi.readFully(sopMarkSeg[t][p], 0, CSJ2K.j2k.codestream.Markers.SOP_LENGTH);
                    }

                    if (!tempEph)
                    {
                        // EPH marker is kept in header
                        length += CSJ2K.j2k.codestream.Markers.EPH_LENGTH;
                    }
                    packetHeaders[t][p] = new byte[length];
                    fi.readFully(packetHeaders[t][p], 0, length);
                    markIndex++;

                    // Read packet data
                    length = positions[markIndex + 1] - positions[markIndex];

                    length -= CSJ2K.j2k.codestream.Markers.EPH_LENGTH;
                    if (tempEph)
                    {
                        // EPH marker is used and is skipped
                        fi.skipBytes(CSJ2K.j2k.codestream.Markers.EPH_LENGTH);
                    }

                    packetData[t][p] = new byte[length];
                    fi.readFully(packetData[t][p], 0, length);
                    markIndex++;
                }
            }
        }