import java.io.*;
public class IoTest
{
public static void main(String args[])
{
try
{
FileReader fr = new FileReader(args[0]);
BufferedReader br = new BufferedReader(fr);
while ( br.readLine() != null )
{
System.out.println(" The file content are :" + br.readLine());
}
fis.close();
}
catch ( IOException ioe )
{
System.out.println("The I/O exception is " + ioe);
}
}
}
在上例中,程序使用了具有Buffer功能的Class,使得Disk I/O的讀取速度大大提高。BufferedReader 是取代DataInputStream 而提高讀寫(xiě)速度的Java Class。在新的Java版本中,已不建議使用DataInputStream,因為其讀寫(xiě)是基于字符為單位的。
例二:字符串運算處理
public class StringOperation
{
public static void main(String args[])
{
String sqlQuery = null;
String sqlC);
StringBuffer sb = new StringBuffer();
sb.append("select * from database table where ");
sb.append(" conditionA = conditionB and ");
if ( ! sqlCondition.equals(null)
{
sb.append(sqlCondition);
}
else
{
sb.append(" conditionE = conditionF ");
}
sqlQuery = sb.toString();
// Then connect to the database then excute the database query
// .......
}
}
在上例中,使用StingBuffer class來(lái)完成數據庫查詢(xún)建立,避免使用String class的"+="操作,以減少JVM在內存中創(chuàng )建新的對象,占用資源,增加JVM回收資源負擔。讀者可以使用Java Proflier功能來(lái)具體比較使用不同的String操作,JVM需要完成多少資源回收和運行時(shí)間。因此在JVM中對String直接進(jìn)行"+="是非常昂貴的運算。
例三:處理昂貴的數據庫初始化
目前許多網(wǎng)站可以透過(guò)Web服務(wù)器查詢(xún)數據庫,如何提高數據庫查詢(xún)速度成為許多程序員關(guān)注的問(wèn)題。在Java Servlets或JSP中可以通過(guò)init() 或Jspinit()來(lái)實(shí)現,以下是一具體Java Servlet與數據庫對話(huà)實(shí)例。
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DatabaseServlet extends HttpServlet
{
public void init( ServletConfig conf) throws ServletException
{
super.init(conf);
Connection conn = null;
try
{
Class.forName("sun.jdbc.odbc.JdcOdbcDriver");
Conn = DriverManager.getConnection("jdbc:odbc:yourDSN,"","");
}
catch ( SQLException sqle )
{
System.err.println("your error exception is " + sqle);
}
catch ( ClassNotFoundException cnfe )
{
System.err.println("your error exception is " + cnfe);
}
}
public void doGet( HttpServletRequest req, HttpServletResponse res) throws
ServletException, IOException
{
res.setContentType("text/html");
ServletOutputStream out = null;
// Your HTML formatter
out.println(" Your HTML");
try
{
Statement stmt = conn.creatStatement();
ResultSet rs = stmt.excuteQuery("select * from yourDatabasetable ");
while ( rs.next() )
{
// Processing your data
}
}
catch ( SQLException sqle )
{
out.println("The SQL error is " + sqle);
}
// output your processing result to HTML page
out.println(" your HTML");
rs.close();
stmt.close();
}
public void destroy()
{
try
{
conn.close();
}
catch ( SQLException sqle )
{
System.err.println("your SQL error is " + sqle);
}
}
}
在上例中,由于Java Servlet運行機制的特點(diǎn),將昂貴的數據庫初始化運算在整個(gè)Servlet運行中僅只調用一次的init()中完成,以減少不必要的重復性數據庫運算。讀者可以根據應用的具體情況,甚至將數據庫的Statement和ResultSet部分移至init()中完成,或者調用PreparedStatement與CallableStatement來(lái)優(yōu)化數據庫的運算。同時(shí),對數據庫的連接的關(guān)閉由destroy()一次性完成。
聯(lián)系客服