cdm/src/main/java/ucar/nc2/stream/NcStreamDataRow.java
public NcStreamProto.DataRow encodeData3(String name, boolean isVlen, Section section, Array data) {
    NcStreamProto.DataRow.Builder builder = NcStreamProto.DataRow.newBuilder();
    encodeData3(builder, name, isVlen, section, data);
    return builder.build();
  }
public NcStreamProto.DataRow encodeData3(String name, boolean isVlen, Section section, Array data) {
    NcStreamProto.DataRow.Builder builder = NcStreamProto.DataRow.newBuilder();
    encodeData3(builder, name, isVlen, section, data);
    return builder.build();
  }
/*
message DataRow {
string fullName = 1;
DataType dataType = 2;
Section section = 3;
bool bigend = 4;
uint32 version = 5;
bool isVlen = 7;
uint32 nelems = 9;

oneof
bytes primarray = 10;        // rectangular, primitive array # <1>
repeated string stringdata = 11;  // string dataType # <2>
ArrayStructureRow structdata = 12;  // structure/seq dataType # <3>
repeated uint32 vlens = 13;  // isVlen true # <4>
repeated bytes opaquedata = 14;  // opaque dataType # <5>
}
primarray has nelems * sizeof(dataType) bytes, turn into multidim array of primitives with section info and bigend
stringdata has nelems strings, turn into multidim array of String with section info
structdata has nelems StructureData objects, turn into multidim array of StructureData with section info and bigend
vlens has section.size array lengths
opaquedata has nelems opaque objects, turn into multidim array of Opaque with section info