一個多執行緒的PushbackInputStream問題

computerboy發表於2007-06-25
最近在更改以前老專案的程式碼,出了一個問題,
一部分程式碼:
class mythread extends Thread{
/**
被start()方法呼叫的主執行緒方法.
**/
public void run()
{
dbwr();
}
/**
該方法完成讀檔案,分析檔案,插庫,刪除檔案等全部功能.被執行緒主方法run()呼叫.
**/
public synchronized void dbwr()
{
// File news = new File("./store/");
/**
讀入(./store/)路徑
**/
//File news = new File("./store/");
File news = new File("f:/store/");
/**
存放所讀的檔案物件.
**/
File arry[];
arry=news.listFiles();
int delete_i=0;
try{
if(arry.length<1){
this.sleep(60000);
sernews.insertthread();
this.stop();this.destroy();
}
this.sleep(1000);
/**
一個用於判斷檔案是否結束的位元組,如果結束,會自動返回-1.
**/
byte temp[]=new byte[1];
/**
讀入沒條新聞的分類個數.
**/
byte class_total[]=new byte[4];
/**
讀入新聞類別.
**/
byte class_id[]=new byte[4];
/**
新聞的日期.
**/

byte news_date[]=new byte[4];
/**
新聞時間
**/
byte news_time[]=new byte[4];
/**
新聞標題的長度.
**/
byte title_total[]=new byte[4];
/**
新聞標題
**/
byte news_title[]=new byte[1024];
/**
新聞內容
**/
byte news_content[]=new byte[653600];
/**
新聞ID號,每條新聞去當前資料庫中最大的ID號.
**/
long news_id=0;
for(int i=0;i<arry.length;i++){
delete_i=i;
System.out.print("檔名: "+arry.getName());
if(!arry.isFile()){
arry.delete();
continue;
}
if(arry.length()<40){
System.out.println("非法檔案, 被刪除!");
arry.delete();
continue;
}

/**
把當前的檔案檔案流的形式開啟.
**/
FileInputStream inputfile=new FileInputStream(arry);
/**
把檔案流例項化成一個反壓流.
反壓流---該流的指標能隨檔案的讀入而移動.而且能夠返回以讀完的流的指標向量.
**/
PushbackInputStream readfile=new PushbackInputStream(inputfile,653600);
readfile.read(class_total,0,4);
int class_total_l=toInt(class_total);
if(class_total_l>10){
inputfile.close();
readfile.close();
// readfile.unread(class_total,0,4);
System.out.println("非法檔案, 被刪除!");
arry.delete();
continue;
}
/**
用於儲存資料庫的連結串,分別是hostname,port,SID,username,password.
**/


Class.forName("oracle.jdbc.driver.OracleDriver");
/**
建立JDBC的連線.
**/
Connection conn= DriverManager.getConnection ("jdbc:oracle:thin:@"+sernews.jdbcdrive,sernews.username,sernews.psw);
// Connection conn= DriverManager.getConnection ("jdbc:oracle:thin:@e5500:1521:ora815","xc","xc");
//Connection conn= DriverManager.getConnection ("jdbc:oracle:thin:@172.20.83.170:1521:ora9i","xc","xc");
conn.setAutoCommit(false);
/**
JDBC宣告.
**/
Statement stmt = conn.createStatement();
/**
JDBC返回結果集.
**/
ResultSet result = stmt.executeQuery("select max(news_id) from t_news_class_1");
if(result.next()){
news_id=result.getLong(1);
news_id=news_id+1;
}
int class_id_l;
for(int j=0;j<class_total_l;j++){
readfile.read(class_id,0,4);
class_id_l=toInt(class_id);
stmt.execute("insert into t_news_class_1(news_id,news_class_id) values("+news_id+","+class_id_l+")");
// stmt.execute("insert into t_news_class_1_all(news_id,news_class_id) values("+news_id+","+class_id_l+")");
}

readfile.read(news_date,0,4);
/**
把位元組型的日期轉換成一個整形的數值.
**/
int lDate_value=toInt(news_date);
readfile.read(news_time,0,4);
/**
把位元組型的時間轉換成一個整形的數值.
**/
int lTime_value=toInt(news_time);
/**
把整型的日期轉換成一個字元.
**/
String sundate=String.valueOf(lDate_value);
/**
把整型的時間轉換成一個字元.
**/
String suntime=String.valueOf(lTime_value);
int len=suntime.length();
if(len<6)
{
for(int j=0;j<(6-len);j++)
suntime="0"+suntime;
}

相關文章