public static void buffStreamSimpleTest(System.String filename, int numIts, int[] in_Renamed, int[] in2) { System.Console.Out.WriteLine("New libraries: nom.tam.BufferedDataXXputStream"); System.Console.Out.WriteLine(" Using non-array I/O"); BufferedDataStream f = new BufferedDataStream(new FileStream(filename, FileMode.Create), 32768); resetTime(); int dim = in_Renamed.Length; for (int j = 0; j < numIts; j += 1) { for (int i = 0; i < dim; i += 1) { f.Write(in_Renamed[i]); } } f.Flush(); f.Close(); System.Console.Out.WriteLine(" BDS Int write: " + (4 * dim * numIts) / (1000 * deltaTime())); BufferedDataStream is_Renamed = new BufferedDataStream(new BufferedStream(new FileStream(filename, FileMode.Open, FileAccess.Read), 32768)); resetTime(); for (int j = 0; j < numIts; j += 1) { for (int i = 0; i < dim; i += 1) { in2[i] = is_Renamed.ReadInt32(); } } if (is_Renamed != null) { is_Renamed.Close(); } System.Console.Out.WriteLine(" BDS Int read: " + (4 * dim * numIts) / (1000 * deltaTime())); // Close the stream. //is_Renamed.Flush(); }
public static void buffStreamSimpleTest(System.String filename, int numIts, int[] in_Renamed, int[] in2) { System.Console.Out.WriteLine("New libraries: nom.tam.BufferedDataXXputStream"); System.Console.Out.WriteLine(" Using non-array I/O"); BufferedDataStream f = new BufferedDataStream(new FileStream(filename, FileMode.Create), 32768); resetTime(); int dim = in_Renamed.Length; for (int j = 0; j < numIts; j += 1) { for (int i = 0; i < dim; i += 1) { f.Write(in_Renamed[i]); } } f.Flush(); f.Close(); System.Console.Out.WriteLine(" BDS Int write: " + (4 * dim * numIts) / (1000 * deltaTime())); BufferedDataStream is_Renamed = new BufferedDataStream(new BufferedStream(new FileStream(filename, FileMode.Open, FileAccess.Read), 32768)); resetTime(); for (int j = 0; j < numIts; j += 1) { for (int i = 0; i < dim; i += 1) { in2[i] = is_Renamed.ReadInt32(); } } if (is_Renamed != null) is_Renamed.Close(); System.Console.Out.WriteLine(" BDS Int read: " + (4 * dim * numIts) / (1000 * deltaTime())); // Close the stream. //is_Renamed.Flush(); }
public static void bufferedStreamTest(System.String filename, int numIts, double[] db, double[] db2, float[] fl, float[] fl2, long[] ln, long[] ln2, int[] in_Renamed, int[] in2, short[] sh, short[] sh2, char[] ch, char[] ch2, byte[] by, byte[] by2, bool[] bl, bool[] bl2, int[][][][] multi, int[][][][] multi2) { int dim = db.Length; double ds = SupportClass.Random.NextDouble() - 0.5; double ds2; float fs = (float)(SupportClass.Random.NextDouble() - 0.5); float fs2; int is_Renamed = (int)(1000000 * (SupportClass.Random.NextDouble() - 500000)); int is2; long ls = (long)(100000000000L * (SupportClass.Random.NextDouble() - 50000000000L)); long ls2; short ss = (short)(60000 * (SupportClass.Random.NextDouble() - 30000)); short ss2; char cs = (char)(60000 * SupportClass.Random.NextDouble()); char cs2; byte bs = (byte)(256 * SupportClass.Random.NextDouble() - 128); byte bs2; bool bls = (SupportClass.Random.NextDouble() > 0.5); bool bls2; System.Console.Out.WriteLine("New libraries: nom.tam.util.BufferedDataXXputStream"); System.Console.Out.WriteLine(" Using array I/O methods"); { BufferedDataStream f = new BufferedDataStream(new FileStream(filename, FileMode.Create)); resetTime(); for (int i = 0; i < numIts; i += 1) f.WriteArray(db); System.Console.Out.WriteLine(" BDS Dbl write: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray(fl); System.Console.Out.WriteLine(" BDS Flt write: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray(in_Renamed); System.Console.Out.WriteLine(" BDS Int write: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray(ln); System.Console.Out.WriteLine(" BDS Lng write: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray(sh); System.Console.Out.WriteLine(" BDS Sht write: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray(ch); System.Console.Out.WriteLine(" BDS Chr write: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray((byte[])by); System.Console.Out.WriteLine(" BDS Byt write: " + (1 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray(bl); System.Console.Out.WriteLine(" BDS Boo write: " + (1 * dim * numIts) / (1000 * deltaTime())); f.Write((byte)bs); f.Write((System.Char)cs); f.Write((System.Int16)ss); f.Write(is_Renamed); f.Write(ls); f.Write(fs); f.Write(ds); f.Write(bls); f.WriteArray(multi); f.Flush(); f.Close(); } { BufferedDataStream f = new BufferedDataStream(new FileStream(filename, FileMode.Open, FileAccess.Read)); resetTime(); for (int i = 0; i < numIts; i += 1) f.ReadArray(db2); System.Console.Out.WriteLine(" BDS Dbl read: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray(fl2); System.Console.Out.WriteLine(" BDS Flt read: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray(in2); System.Console.Out.WriteLine(" BDS Int read: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray(ln2); System.Console.Out.WriteLine(" BDS Lng read: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray(sh2); System.Console.Out.WriteLine(" BDS Sht read: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray(ch2); System.Console.Out.WriteLine(" BDS Chr read: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray((byte[])by2); System.Console.Out.WriteLine(" BDS Byt read: " + (1 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray(bl2); System.Console.Out.WriteLine(" BDS Boo read: " + (1 * dim * numIts) / (1000 * deltaTime())); bs2 = (byte)f.ReadByte(); cs2 = f.ReadChar(); ss2 = f.ReadInt16(); is2 = f.ReadInt32(); ls2 = f.ReadInt64(); fs2 = f.ReadSingle(); ds2 = f.ReadDouble(); bls2 = f.ReadBoolean(); for (int i = 0; i < 10; i += 1) { multi2[i][i][i][i] = 0; } // Now read only pieces of the multidimensional array. for (int i = 0; i < 5; i += 1) { System.Console.Out.WriteLine("Multiread:" + i); // Skip the odd initial indices and // read the evens. //BinaryReader temp_BinaryReader; System.Int64 temp_Int64; //temp_BinaryReader = f; temp_Int64 = f.Position; //temp_BinaryReader.BaseStream.Position; temp_Int64 = f.Seek(4000) - temp_Int64; //temp_BinaryReader.BaseStream.Seek(4000, SeekOrigin.Current) - temp_Int64; int generatedAux28 = (int)temp_Int64; f.ReadArray(multi2[2 * i + 1]); } // f.Close(); } System.Console.Out.WriteLine("Stream Verification:"); System.Console.Out.WriteLine(" An error should be reported for double and float NaN's"); System.Console.Out.WriteLine(" Arrays:"); for (int i = 0; i < dim; i += 1) { if (db[i] != db2[i] && !Double.IsNaN(db[i]) && !Double.IsNaN(db2[i])) { System.Console.Out.WriteLine(" Double error at " + i + " " + db[i] + " " + db2[i]); } if (fl[i] != fl2[i] && !Single.IsNaN(fl[i]) && !Single.IsNaN(fl2[i])) { System.Console.Out.WriteLine(" Float error at " + i + " " + fl[i] + " " + fl2[i]); } if (in_Renamed[i] != in2[i]) { System.Console.Out.WriteLine(" Int error at " + i + " " + in_Renamed[i] + " " + in2[i]); } if (ln[i] != ln2[i]) { System.Console.Out.WriteLine(" Long error at " + i + " " + ln[i] + " " + ln2[i]); } if (sh[i] != sh2[i]) { System.Console.Out.WriteLine(" Short error at " + i + " " + sh[i] + " " + sh2[i]); } if (ch[i] != ch2[i]) { System.Console.Out.WriteLine(" Char error at " + i + " " + (int)ch[i] + " " + (int)ch2[i]); } if (by[i] != by2[i]) { System.Console.Out.WriteLine(" Byte error at " + i + " " + by[i] + " " + by2[i]); } if (bl[i] != bl2[i]) { System.Console.Out.WriteLine(" Bool error at " + i + " " + bl[i] + " " + bl2[i]); } } System.Console.Out.WriteLine(" Scalars:"); // Check the scalars. if (bls != bls2) { System.Console.Out.WriteLine(" Bool Scalar mismatch:" + bls + " " + bls2); } if (bs != bs2) { System.Console.Out.WriteLine(" Byte Scalar mismatch:" + bs + " " + bs2); } if (cs != cs2) { System.Console.Out.WriteLine(" Char Scalar mismatch:" + (int)cs + " " + (int)cs2); } if (ss != ss2) { System.Console.Out.WriteLine(" Short Scalar mismatch:" + ss + " " + ss2); } if (is_Renamed != is2) { System.Console.Out.WriteLine(" Int Scalar mismatch:" + is_Renamed + " " + is2); } if (ls != ls2) { System.Console.Out.WriteLine(" Long Scalar mismatch:" + ls + " " + ls2); } if (fs != fs2) { System.Console.Out.WriteLine(" Float Scalar mismatch:" + fs + " " + fs2); } if (ds != ds2) { System.Console.Out.WriteLine(" Double Scalar mismatch:" + ds + " " + ds2); } System.Console.Out.WriteLine(" Multi: odd rows should match"); for (int i = 0; i < 10; i += 1) { System.Console.Out.WriteLine(" " + i + " " + multi[i][i][i][i] + " " + multi2[i][i][i][i]); } System.Console.Out.WriteLine("Done BufferedStream Tests"); }
/// <summary>Write a Fits Object to an external Stream. The stream is left open.</summary> /// <param name="dos">A DataOutput stream</param> public virtual void Write(Stream os) { ArrayDataIO obs; bool newOS = false; if(os is ArrayDataIO) { obs = (ArrayDataIO) os; } else { newOS = true; obs = new BufferedDataStream(os); } BasicHDU hh; for(int i = 0; i < NumberOfHDUs; i += 1) { try { hh = (BasicHDU)hduList[i]; hh.Write(obs); } catch(IndexOutOfRangeException e) { SupportClass.WriteStackTrace(e, Console.Error); throw new FitsException("Internal Error: Vector Inconsistency" + e); } } if(newOS) { try { obs.Flush(); obs.Close(); } catch(IOException) { Console.Error.WriteLine("Warning: error closing FITS output stream"); } } // change suggested in .99 version try { if (obs is BufferedFile) { ((BufferedFile)obs).SetLength( ((BufferedFile)obs).FilePointer); } } catch (IOException e) { System.Console.Out.WriteLine("Exception occured while Writing BufferedFile: \n\t" + e.Message); // Ignore problems... } }
public void WriteFrameImpl(IntPtr intPtr, int p, RawFrameInfo info) { object data = MarshalToCLR(intPtr, p); Fits fits = new Fits(); BasicHDU hdu = FitsFactory.HDUFactory(data); if ((data is short[][] || data is short[][][]) && _significantBitDepth > 8) { hdu.AddValue("BZERO", 32768.0, ""); } AddMetadataToFrame(info, hdu); fits.AddHDU(hdu); using (FileStream fs = File.Create(Path.GetTempFileName())) { using (BufferedDataStream f = new BufferedDataStream(fs)) { fits.Write(f); } } }
public static void bufferedStreamTest(System.String filename, int numIts, double[] db, double[] db2, float[] fl, float[] fl2, long[] ln, long[] ln2, int[] in_Renamed, int[] in2, short[] sh, short[] sh2, char[] ch, char[] ch2, byte[] by, byte[] by2, bool[] bl, bool[] bl2, int[][][][] multi, int[][][][] multi2) { int dim = db.Length; double ds = SupportClass.Random.NextDouble() - 0.5; double ds2; float fs = (float)(SupportClass.Random.NextDouble() - 0.5); float fs2; int is_Renamed = (int)(1000000 * (SupportClass.Random.NextDouble() - 500000)); int is2; long ls = (long)(100000000000L * (SupportClass.Random.NextDouble() - 50000000000L)); long ls2; short ss = (short)(60000 * (SupportClass.Random.NextDouble() - 30000)); short ss2; char cs = (char)(60000 * SupportClass.Random.NextDouble()); char cs2; byte bs = (byte)(256 * SupportClass.Random.NextDouble() - 128); byte bs2; bool bls = (SupportClass.Random.NextDouble() > 0.5); bool bls2; System.Console.Out.WriteLine("New libraries: nom.tam.util.BufferedDataXXputStream"); System.Console.Out.WriteLine(" Using array I/O methods"); { BufferedDataStream f = new BufferedDataStream(new FileStream(filename, FileMode.Create)); resetTime(); for (int i = 0; i < numIts; i += 1) { f.WriteArray(db); } System.Console.Out.WriteLine(" BDS Dbl write: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray(fl); } System.Console.Out.WriteLine(" BDS Flt write: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray(in_Renamed); } System.Console.Out.WriteLine(" BDS Int write: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray(ln); } System.Console.Out.WriteLine(" BDS Lng write: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray(sh); } System.Console.Out.WriteLine(" BDS Sht write: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray(ch); } System.Console.Out.WriteLine(" BDS Chr write: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray((byte[])by); } System.Console.Out.WriteLine(" BDS Byt write: " + (1 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray(bl); } System.Console.Out.WriteLine(" BDS Boo write: " + (1 * dim * numIts) / (1000 * deltaTime())); f.Write((byte)bs); f.Write((System.Char)cs); f.Write((System.Int16)ss); f.Write(is_Renamed); f.Write(ls); f.Write(fs); f.Write(ds); f.Write(bls); f.WriteArray(multi); f.Flush(); f.Close(); } { BufferedDataStream f = new BufferedDataStream(new FileStream(filename, FileMode.Open, FileAccess.Read)); resetTime(); for (int i = 0; i < numIts; i += 1) { f.ReadArray(db2); } System.Console.Out.WriteLine(" BDS Dbl read: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray(fl2); } System.Console.Out.WriteLine(" BDS Flt read: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray(in2); } System.Console.Out.WriteLine(" BDS Int read: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray(ln2); } System.Console.Out.WriteLine(" BDS Lng read: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray(sh2); } System.Console.Out.WriteLine(" BDS Sht read: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray(ch2); } System.Console.Out.WriteLine(" BDS Chr read: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray((byte[])by2); } System.Console.Out.WriteLine(" BDS Byt read: " + (1 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray(bl2); } System.Console.Out.WriteLine(" BDS Boo read: " + (1 * dim * numIts) / (1000 * deltaTime())); bs2 = (byte)f.ReadByte(); cs2 = f.ReadChar(); ss2 = f.ReadInt16(); is2 = f.ReadInt32(); ls2 = f.ReadInt64(); fs2 = f.ReadSingle(); ds2 = f.ReadDouble(); bls2 = f.ReadBoolean(); for (int i = 0; i < 10; i += 1) { multi2[i][i][i][i] = 0; } // Now read only pieces of the multidimensional array. for (int i = 0; i < 5; i += 1) { System.Console.Out.WriteLine("Multiread:" + i); // Skip the odd initial indices and // read the evens. //BinaryReader temp_BinaryReader; System.Int64 temp_Int64; //temp_BinaryReader = f; temp_Int64 = f.Position; //temp_BinaryReader.BaseStream.Position; temp_Int64 = f.Seek(4000) - temp_Int64; //temp_BinaryReader.BaseStream.Seek(4000, SeekOrigin.Current) - temp_Int64; int generatedAux28 = (int)temp_Int64; f.ReadArray(multi2[2 * i + 1]); } // f.Close(); } System.Console.Out.WriteLine("Stream Verification:"); System.Console.Out.WriteLine(" An error should be reported for double and float NaN's"); System.Console.Out.WriteLine(" Arrays:"); for (int i = 0; i < dim; i += 1) { if (db[i] != db2[i] && !Double.IsNaN(db[i]) && !Double.IsNaN(db2[i])) { System.Console.Out.WriteLine(" Double error at " + i + " " + db[i] + " " + db2[i]); } if (fl[i] != fl2[i] && !Single.IsNaN(fl[i]) && !Single.IsNaN(fl2[i])) { System.Console.Out.WriteLine(" Float error at " + i + " " + fl[i] + " " + fl2[i]); } if (in_Renamed[i] != in2[i]) { System.Console.Out.WriteLine(" Int error at " + i + " " + in_Renamed[i] + " " + in2[i]); } if (ln[i] != ln2[i]) { System.Console.Out.WriteLine(" Long error at " + i + " " + ln[i] + " " + ln2[i]); } if (sh[i] != sh2[i]) { System.Console.Out.WriteLine(" Short error at " + i + " " + sh[i] + " " + sh2[i]); } if (ch[i] != ch2[i]) { System.Console.Out.WriteLine(" Char error at " + i + " " + (int)ch[i] + " " + (int)ch2[i]); } if (by[i] != by2[i]) { System.Console.Out.WriteLine(" Byte error at " + i + " " + by[i] + " " + by2[i]); } if (bl[i] != bl2[i]) { System.Console.Out.WriteLine(" Bool error at " + i + " " + bl[i] + " " + bl2[i]); } } System.Console.Out.WriteLine(" Scalars:"); // Check the scalars. if (bls != bls2) { System.Console.Out.WriteLine(" Bool Scalar mismatch:" + bls + " " + bls2); } if (bs != bs2) { System.Console.Out.WriteLine(" Byte Scalar mismatch:" + bs + " " + bs2); } if (cs != cs2) { System.Console.Out.WriteLine(" Char Scalar mismatch:" + (int)cs + " " + (int)cs2); } if (ss != ss2) { System.Console.Out.WriteLine(" Short Scalar mismatch:" + ss + " " + ss2); } if (is_Renamed != is2) { System.Console.Out.WriteLine(" Int Scalar mismatch:" + is_Renamed + " " + is2); } if (ls != ls2) { System.Console.Out.WriteLine(" Long Scalar mismatch:" + ls + " " + ls2); } if (fs != fs2) { System.Console.Out.WriteLine(" Float Scalar mismatch:" + fs + " " + fs2); } if (ds != ds2) { System.Console.Out.WriteLine(" Double Scalar mismatch:" + ds + " " + ds2); } System.Console.Out.WriteLine(" Multi: odd rows should match"); for (int i = 0; i < 10; i += 1) { System.Console.Out.WriteLine(" " + i + " " + multi[i][i][i][i] + " " + multi2[i][i][i][i]); } System.Console.Out.WriteLine("Done BufferedStream Tests"); }
/// <summary>Add some data to the heap.</summary> internal virtual int PutData(Object data) { int size = ArrayFuncs.ComputeSize(data); ExpandHeap(size); MemoryStream bo = new MemoryStream(size); try { BufferedDataStream o = new BufferedDataStream(bo); o.WriteArray(data); o.Flush(); o.Close(); } catch(IOException) { throw new FitsException("Unable to write variable column length data"); } Array.Copy(bo.ToArray(), 0, heap, heapSize, size); int oldOffset = heapSize; heapSize += size; // change suggested in .99.1 version: heapOffset = heapSize; return oldOffset; }
/// <summary>Check if the Heap can accommodate a given requirement. If not expand the heap.</summary> internal virtual void ExpandHeap(int need) { // change suggested in .99.1 version: // Invalidate any existing input stream to the heap. bstr = null; if (heapSize + need > heap.Length) { // change suggested in .99.1 version: expanded = true; int newlen = (heapSize + need) * 2; if (newlen < 16384) { newlen = 16384; } byte[] newHeap = new byte[newlen]; Array.Copy(heap, 0, newHeap, 0, heapSize); heap = newHeap; } }
/// <summary>Read the heap</summary> public virtual void Read(ArrayDataIO str) { if (str is RandomAccess) { fileOffset = FitsUtil.FindOffset(str); input = str; } if (heap != null) { try { str.Read(heap, 0, heapSize); } catch(IOException e) { throw new FitsException("Error reading heap:" + e); } } // change suggested in .99.1 version: bstr = null; }
/// <summary>Get data from the heap.</summary> /// <param name="offset">The offset at which the data begins.</param> /// <param name="array"> The array to be extracted.</param> public virtual void GetData(int offset, Object array) { // Can we reuse the existing byte stream? try { if (bstr == null || heapOffset > offset) { heapOffset = 0; bstr = new BufferedDataStream(new MemoryStream(heap)); } //System.IO.BinaryReader temp_BinaryReader; System.Int64 temp_Int64; //temp_BinaryReader = bstr; temp_Int64 = bstr.Position; //temp_BinaryReader.BaseStream.Position; temp_Int64 = bstr.Seek(offset - heapOffset) - temp_Int64; //temp_BinaryReader.BaseStream.Seek(offset - heapOffset, System.IO.SeekOrigin.Current) - temp_Int64; int generatedAux = (int)temp_Int64; heapOffset = offset; heapOffset += bstr.ReadArray(array); } catch(IOException e) { throw new FitsException("Error decoding heap area at offset=" + offset + ". Exception: Exception " + e); } }