/** * Read the result of a data request. Only one variable at a time. * * @param is read from input stream * @param ncfile need the metadata from here to interpret structure data * @return DataResult * @throws IOException on read error */ public DataResult readData(InputStream is, NetcdfFile ncfile, String location) throws IOException { byte[] b = new byte[4]; int bytesRead = NcStream.readFully(is, b); if (bytesRead < b.length) throw new EOFException(location); if (NcStream.test(b,NcStream.MAGIC_DATA)) return readData1(is, ncfile); if (NcStream.test(b,NcStream.MAGIC_DATA2)) return readData2(is); throw new IOException("Data transfer corrupted on " + location); }
private void readNext() throws IOException { byte[] b = new byte[4]; NcStream.readFully(is, b); // starts with MAGIC_START, MAGIC_HEADER or just MAGIC_HEADER if (NcStream.test(b, NcStream.MAGIC_VDATA)) { int dsize = NcStream.readVInt(is); byte[] datab = new byte[dsize]; NcStream.readFully(is, datab); // curr = NcStream.decodeStructureData(members, bo, datab); LOOK // System.out.printf("StreamDataIterator read sdata size= %d%n", dsize); } else if (NcStream.test(b, NcStream.MAGIC_VEND)) { curr = null; close(); } else { throw new IllegalStateException("bad stream"); } }
public CoverageCollection open() throws IOException { long start = System.currentTimeMillis(); HTTPSession httpClient = HTTPFactory.newSession(endpoint); String url = endpoint + "?req=header"; CdmrCoverageReader reader = new CdmrCoverageReader(endpoint, httpClient); // get the header try (HTTPMethod method = HTTPFactory.Get(httpClient, url)) { method.setFollowRedirects(true); if (showRequest) System.out.printf("CdmrFeature request %s %n", url); int statusCode = method.execute(); if (statusCode == 404) throw new FileNotFoundException(getErrorMessage(method)); if (statusCode >= 300) throw new IOException(getErrorMessage(method)); InputStream is = method.getResponseAsStream(); byte[] b = new byte[4]; NcStream.readFully(is, b); if (!NcStream.test(b, NcStream.MAGIC_HEADERCOV)) throw new IOException("Data corrupted on " + endpoint); // header message int msize = NcStream.readVInt(is); byte[] m = new byte[msize]; NcStream.readFully(is, m); CdmrFeatureProto.CoverageDataset proto = CdmrFeatureProto.CoverageDataset.parseFrom(m); CoverageCollection gridDataset = decodeHeader(proto, reader); long took = System.currentTimeMillis() - start; if (showRequest) System.out.printf(" took %d msecs %n", took); return gridDataset; } }