我有一個需要處理字節數組源的程序。當字節數組大小爲3000字節時,本來程序工作正常。現在數據量增加,陣列大小需要從3000變爲30000(10次)。讀取字節數組時意外的長處理時間
我做了一個樣本基準程序來測試循環時間。我認爲所需的CPU時間應該根據陣列大小線性增加,但基準程序顯示,與過程3000字節相比,進程30000字節需要多於35倍。
這是我的基準測試程序。程序是否可以改進,使其僅使用大約10倍的CPU時間?
public static void main(String args[])
int TestArraySize=30000;
String strFinalMessage="";
// create a dummy byte array
byte[] bytearrayMessageContent = new byte[TestArraySize];
for (int i=0; i<TestArraySize; i++) {
// fill character A-J into the dummy array
bytearrayMessageContent[i] = (byte) (i%10+65);
}
System.out.println(bytearrayMessageContent.length);
// time start time
long lngCurrentTime = System.currentTimeMillis();
// process the byte array
int intTHMessageLenAdj = TestArraySize;
try {
InputStream input = new ByteArrayInputStream(bytearrayMessageContent);
while (intTHMessageLenAdj > 0) {
// get random length of bytes to process
int RandomLength = getNextRandom();
if (RandomLength > intTHMessageLenAdj) {
RandomLength = intTHMessageLenAdj;
}
// get the bytes to be process in a byte array and process it
byte[] bytearrayMsgTrunk = new byte[RandomLength];
input.read(bytearrayMsgTrunk);
// do some logic here
strFinalMessage += new String(bytearrayMsgTrunk) + "||";
// repeat looping until all bytes are read
intTHMessageLenAdj -= RandomLength;
}
input.close();
} catch (Exception ex) {
ex.printStackTrace();
}
// time end time
lngCurrentTime = System.currentTimeMillis() - lngCurrentTime;
//System.out.println(strFinalMessage);
System.out.println(lngCurrentTime);
}
public static int getNextRandom() {
// info is arround 4 bytes size
Random random = new Random();
return random.nextInt(8);
}
也許使用一個stringbuilder? – 2010-08-02 09:25:21