Я читаю CSV-файл, который имеет около 50 000 строк и 1,1 МБ в размерах (и может увеличиться).
В Code1 я использую String для обработки CSV, в то время как в Code2 я использую StringBuilder (только один поток выполняет код, поэтому нет проблем с параллелизмом)
Использование StringBuilder немного затрудняет чтение кода, используя обычный класс String.
Я преждевременно оптимизирую вещи с помощью StringBuilder в Code2, чтобы сэкономить немного пространства кучи и памяти?
Код1
fr = new FileReader(file);
BufferedReader reader = new BufferedReader(fr);
String line = reader.readLine();
while ( line != null )
{
int separator = line.indexOf(',');
String symbol = line.substring(0, seperator);
int begin = separator;
separator = line.indexOf(',', begin+1);
String price = line.substring(begin+1, seperator);
// Publish this update
publisher.publishQuote(symbol, price);
// Read the next line of fake update data
line = reader.readLine();
}
Кодекса2
fr = new FileReader(file);
StringBuilder stringBuilder = new StringBuilder(reader.readLine());
while( stringBuilder.toString() != null ) {
int separator = stringBuilder.toString().indexOf(',');
String symbol = stringBuilder.toString().substring(0, separator);
int begin = separator;
separator = stringBuilder.toString().indexOf(',', begin+1);
String price = stringBuilder.toString().substring(begin+1, separator);
publisher.publishQuote(symbol, price);
stringBuilder.replace(0, stringBuilder.length(), reader.readLine());
}
Редактировать
Я исключил вызов toString (), поэтому будет меньше создаваемых строковых объектов.
Code3
while( stringBuilder.length() > 0 ) {
int separator = stringBuilder.indexOf(",");
String symbol = stringBuilder.substring(0, separator);
int begin = separator;
separator = stringBuilder.indexOf(",", begin+1);
String price = stringBuilder.substring(begin+1, separator);
publisher.publishQuote(symbol, price);
Thread.sleep(10);
stringBuilder.replace(0, stringBuilder.length(), reader.readLine());
}
Кроме того, исходный код загружается с http://www.devx.com/Java/Article/35246/0/page/1