private ucar . ma2 . ArrayStructure readStructureData ( ucar . nc2 . Structure s , Section section ) throws java . io . IOException , InvalidRangeException { H4header . Vinfo vinfo = ( H4header . Vinfo ) s . getSPobject ( ) ; vinfo . setLayoutInfo ( ) ; // make sure needed info is present int recsize = vinfo . elemSize ; // create the ArrayStructure StructureMembers members = s . makeStructureMembers ( ) ; for ( StructureMembers . Member m : members . getMembers ( ) ) { Variable v2 = s . findVariable ( m . getName ( ) ) ; H4header . Minfo minfo = ( H4header . Minfo ) v2 . getSPobject ( ) ; m . setDataParam ( minfo . offset ) ; } members . setStructureSize ( recsize ) ; ArrayStructureBB structureArray = new ArrayStructureBB ( members , section . getShape ( ) ) ; // LOOK subset // loop over records byte [ ] result = structureArray . getByteBuffer ( ) . array ( ) ; /*if (vinfo.isChunked) { InputStream is = getChunkedInputStream(vinfo); PositioningDataInputStream dataSource = new PositioningDataInputStream(is); Layout layout = new LayoutRegular(vinfo.start, recsize, s.getShape(), section); IospHelper.readData(dataSource, layout, DataType.STRUCTURE, result); */ if ( ! vinfo . isLinked && ! vinfo . isCompressed ) { Layout layout = new LayoutRegular ( vinfo . start , recsize , s . getShape ( ) , section ) ; IospHelper . readData ( raf , layout , DataType . STRUCTURE , result , - 1 , true ) ; /* option 1 } else if (vinfo.isLinked && !vinfo.isCompressed) { Layout layout = new LayoutSegmented(vinfo.segPos, vinfo.segSize, recsize, s.getShape(), section); IospHelper.readData(raf, layout, DataType.STRUCTURE, result, -1); */ // option 2 } else if ( vinfo . isLinked && ! vinfo . isCompressed ) { InputStream is = new LinkedInputStream ( vinfo ) ; PositioningDataInputStream dataSource = new PositioningDataInputStream ( is ) ; Layout layout = new LayoutRegular ( 0 , recsize , s . getShape ( ) , section ) ; IospHelper . readData ( dataSource , layout , DataType . STRUCTURE , result ) ; } else if ( ! vinfo . isLinked && vinfo . isCompressed ) { InputStream is = getCompressedInputStream ( vinfo ) ; PositioningDataInputStream dataSource = new PositioningDataInputStream ( is ) ; Layout layout = new LayoutRegular ( 0 , recsize , s . getShape ( ) , section ) ; IospHelper . readData ( dataSource , layout , DataType . STRUCTURE , result ) ; } else if ( vinfo . isLinked && vinfo . isCompressed ) { InputStream is = getLinkedCompressedInputStream ( vinfo ) ; PositioningDataInputStream dataSource = new PositioningDataInputStream ( is ) ; Layout layout = new LayoutRegular ( 0 , recsize , s . getShape ( ) , section ) ; IospHelper . readData ( dataSource , layout , DataType . STRUCTURE , result ) ; } else { throw new IllegalStateException ( ) ; } return structureArray ; }
Structures must be fixed sized