1. java io 流 有一種流是邊讀邊寫的 , 還一種 不管文件多大都讀到內存中 , 分別叫什麼
邊讀邊寫用多線程每個流都可以做到,管道流就是典型的流!
不管文件多大,讀到內存那是不可能的,你所說的應該是內存流
內存流典型的流(位元組數組流),特點內部封裝一個可變長度的數組,
特點就是處理速度快,可對外提供完整數據的數組,非常方便!
試想一下,你一個文件8G大,你能全都讀到內存中去?對么....
2. java 邊寫邊讀一個集合對象,怎麼簡單的實現
List有個 addAll方法
boolean addAll(Collection<? extends E> c)
添加指定 collection 中的所有元素到此列表的結尾,順序是指定 collection 的迭代器返回這些元素的順序(可選操作)。
多執行幾次就實現了你的功能
3. Java中IO緩沖區的原理是什麼
如果是邊讀邊寫,就會很慢,也傷硬碟。緩沖區就是內存里的一塊區域,把數據先存內存里,然後一次性寫入,類似資料庫的批量操作,這樣效率比較高。
調用I\O操作的時候,實際上還是一個一個的讀或者寫,關鍵就在,CPU只有一個,不論是幾個核心。CPU在系統調用時,會不會還要參與主要操作?參與多次就會花更多的時間。
系統調用時,若不用緩沖,CPU會酌情考慮使用 中斷。此時CPU是主動地,每個周期中都要花去一部分去詢問I\O設備是否讀完數據,這段時間CPU不能做任何其他的事情(至少負責執行這段模塊的核不能)。所以,調用一次讀了一個字,通報一次,CPU騰出時間處理一次。
而設置緩沖,CPU通常會使用 DMA 方式去執行 I\O 操作。CPU 將這個工作交給DMA控制器來做,自己騰出時間做其他的事,當DMA完成工作時,DMA會主動告訴CPU「操作完成」。這時,CPU接管後續工作。在此,CPU 是被動的。DMA是專門 做 I\O 與 內存 數據交換的,不僅自身效率高,也節約了CPU時間,CPU在DMA開始和結束時做了一些設置罷了。
所以,調用一次,不必通報CPU,等緩沖區滿了,DMA 會對C PU 說 「嘿,伙計!快過來看看,把他們都搬走吧」。
綜上,設置緩沖,就建立了數據塊,使得DMA執行更方便,CPU也有空閑,而不是獃獃地候著I\O數據讀來。從微觀角度來說,設置緩沖效率要高很多。盡管,不能從這個程序上看出來。 幾萬字的讀寫\就能看到差距
4. java如何實現對同一個text文本邊寫邊讀
import java.io.*;
import java.lang.*;
import java.util.Scanner;
import java.io.*;
import java.lang.*;
public class Sy2Student
{
public static void main(String []args)
{
Writer Swriter=null;
Scanner s=new Scanner(System.in);
System.out.print("輸入學生的人數:");
int Studentpeople=s.nextInt();
String []StudentScore=new String[Studentpeople];
String []StudentName=new String[Studentpeople];
System.out.println("請輸入學生的姓名和總分");
for(int i=0;i<Studentpeople;i++)
{
StudentName[i]=s.next();
StudentScore[i]=s.next();
System.out.println("\n");
}
int []IntStudentScore=new int[Studentpeople];
for(int n=0;n<Studentpeople;n++)
{
IntStudentScore[n]=Integer.parseInt(StudentScore[n]);
}
int StudentScoreMin=IntStudentScore[0];
int StudentScoreMax=IntStudentScore[0];
for(int m=1;m<Studentpeople;m++)
{
int AllScore=IntStudentScore[0];
AllScore+=IntStudentScore[m];
//求最低分
if(StudentScoreMin>IntStudentScore[m])
StudentScoreMin=IntStudentScore[m];
else
StudentScoreMin=StudentScoreMin;
}
//求最高分
for(int p=0;p<Studentpeople;p++)
{
if(StudentScoreMax<IntStudentScore[p])
StudentScoreMax=IntStudentScore[p];
else
StudentScoreMax=StudentScoreMax;
}
try{
Swriter=new FileWriter("Student.txt");
Swriter.write("學生成績表單\n");
Swriter.write("姓名:\t\t總分:\n");
for(int j=0;j<Studentpeople;j++)
{
Swriter.write(StudentName[j]+"\t\t");
Swriter.write(StudentScore[j]+"\n");
}
Swriter.write("最高分:"+StudentScoreMax+"\n");
Swriter.write("最低分:"+StudentScoreMin+"\n");
}catch(IOException e){
e.printStackTrace();
}finally{
if(Swriter!=null)
try{
Swriter.close();
}catch(IOException e){}
}
Reader RStudent=null;
try{
RStudent=new FileReader("Student.txt");
char []buffer=new char[1024];
int offset;
while((offset=RStudent.read(buffer))>0)
System.out.println(new String(buffer,0,offset));
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
if(RStudent!=null)
try{
RStudent.close();
}catch(IOException e){}
}
}
}
你可以參考著個程序 我自己寫的
5. 用java讀取文件可以一邊讀取一邊寫入嗎如果我讀取到某行數據,想用其它數據替換或者刪除怎麼寫
另外寫一個文件,把有用的、需要改動的信息寫入,最後刪除原文件。
6. java讀寫同一個文件
在使用BufferedReader和BufferedWriter 要注意:
讀不會修改文件,所以同一個file聲明多個reader來讀,沒有問題,
但是寫會修改文件,所以在對一個file綁定了writer之後,不能再讀了,也不能再聲明其它writer到這個file,所以可以說writer是獨占的,
如果你調試一下 可以發現,在聲明writer之後,file所指定的文件內容會變成空,
所以你將
BufferedWriter writer = new BufferedWriter(new FileWriter(file)); 提到read之前會報NullPointerException
希望能給樓主幫助~~
純手工打造,還請樓主採納~~
下面是多個reader一個writer的例子:
packagetest;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
publicclassTest{
publicstaticvoidmain(String[]args){
Filefile=newFile("D:/test.txt");
try{
BufferedReaderreader=newBufferedReader(newFileReader(file));
BufferedReaderreader2=newBufferedReader(newFileReader(file));
Stringline=reader.readLine();
Stringline2=reader2.readLine();
System.out.println(line);
System.out.println(line2);
BufferedWriterwriter=newBufferedWriter(newFileWriter(file));
writer.write(line);
writer.flush();
reader.close();
writer.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
7. java文件上傳是是一次性上傳到伺服器內存再讀還是一邊讀客戶端一邊寫
兩種情況,都會有
~
~
~
~
~
~
~
~