The IBM® Toolbox for Java™ AS400File class uses record blocking to improve performance.
The number of records to read in each block can be set when the file is opened. For example:
// Create an AS400 object, the file exists on this
// server.
AS400 sys = new AS400("mySystem.myCompany.com");
// Create a file object that represents the file
SequentialFile myFile = new SequentialFile(sys, "/QSYS.LIB/MYLIB.LIB/MYFILE.FILE/%FILE%.MBR");
// Assume that the AS400FileRecordDescription class
// was used to generate the code for a subclass of
// RecordFormat that represents the record format
// of file MYFILE in library MYLIB. The code was
// compiled and is available for use by the Java
// program.
RecordFormat recordFormat = new MYFILEFormat();
// Set the record format for myFile. This must
// be done before invoking open()
myFile.setRecordFormat(recordFormat);
// Open the file. Specify a blocking factor of 50.
int blockingFactor = 50;
myFile.open(AS400File.READ_ONLY, blockingFactor, AS400File.COMMIT_LOCK_LEVEL_NONE);
// Read the first record of the file. Because
// a blocking factor was specified, 50 records
// are retrieved during this read() invocation.
Record record = myFile.readFirst();
for (int i = 1; i < 50 && record != null; i++)
{
// The records read in this loop will be served out of the block of
// records cached on the client.
record = myFile.readNext();
}
....
// Close the file since I am done using it
myFile.close();
// Disconnect since I am done using
// record-level access
sys.disconnectService(AS400.RECORDACCESS);
For example:
// Create an AS400 object, the file exists on this
// server.
AS400 sys = new AS400("mySystem.myCompany.com");
// Create a file object that represents the file
SequentialFile myFile = new SequentialFile(sys, "/QSYS.LIB/MYLIB.LIB/MYFILE.FILE/%FILE%.MBR");
// Assume that the AS400FileRecordDescription class
// was used to generate the code for a subclass of
// RecordFormat that represents the record format
// of file MYFILE in library MYLIB. The code was
// compiled and is available for use by the Java
// program.
RecordFormat recordFormat = new MYFILEFormat();
// Set the record format for myFile. This must
// be done prior to invoking open()
myFile.setRecordFormat(recordFormat);
// Open the file. Specify a blocking factor of 50.
int blockingFactor = 50;
myFile.open(AS400File.WRITE_ONLY, blockingFactor, AS400File.COMMIT_LOCK_LEVEL_NONE);
// Create an array of records to write to the file
Record[] records = new Record[100];
for (int i = 0; i < 100; i++)
{
// Assume the file has two fields,
// CUSTNAME and CUSTNUM
records[i] = recordFormat.getNewRecord();
records[i].setField("CUSTNAME", "Customer " + String.valueOf(i));
records[i].setField("CUSTNUM", new Integer(i));
}
// Write the records to the file. Because the
// blocking factor is 50, only two trips to the
// server are made with each trip writing 50 records
myFile.write(records);
....
// Close the file since I am done using it
myFile.close();
// Disconnect since I am done using
// record-level access
sys.disconnectService(AS400.RECORDACCESS);