導航:首頁 > 編程語言 > java對象讀寫

java對象讀寫

發布時間:2022-08-15 21:41:15

java怎麼直接在內存中讀寫對象

Java出現的目的就是為了防止對內存的直接操作,所以正常情況下是不必要對內存直接進行讀寫的。
如果你需要的只是在內存中開辟出一塊區域,讀寫一些自定義的內容,可以用byte[]來實現。
如果你真的需要讀取或者修改內存塊,java中的unsafe類可以幫助你實現一些功能,但是這是不建議用的,因為它可能導致java虛擬機出錯。包含unsafe的java代碼也不是跨平台的。

② java實現文件的讀寫,是叫啥

您好,你的問題,我之前好像也遇到過,以下是我原來的解決思路和方法,希望能幫助到你,若有錯誤,還望見諒!展開全部
Java.io包中包括許多類提供許多有關文件的各個方面操作。
1 輸入輸出抽象基類InputStream/OutputStream ,實現文件內容操作的基本功能函數read()、 write()、close()、skip()等;一般都是創建出其派生類對象(完成指定的特殊功能)來實現文件讀寫。在文件讀寫的編程過程中主要應該注意異常處理的技術。
2 FileInputStream/FileOutputStream:
用於本地文件讀寫(二進制格式讀寫並且是順序讀寫,讀和寫要分別創建出不同的文件流對象);
本地文件讀寫編程的基本過程為:
① 生成文件流對象(對文件讀操作時應該為FileInputStream類,而文件寫應該為FileOutputStream類);
② 調用FileInputStream或FileOutputStream類中的功能函數如read()、write(int b)等)讀寫文件內容;
③ 關閉文件(close())。
3 PipedInputStream/PipedOutputStream:
用於管道輸入輸出(將一個程序或一個線程的輸出結果直接連接到另一個程序或一個線程的輸入埠,實現兩者數據直接傳送。操作時需要連結);
4管道的連接:
方法之一是通過構造函數直接將某一個程序的輸出作為另一個程序的輸入,在定義對象時指明目標管道對象
PipedInputStream pInput=new PipedInputStream();
PipedOutputStream pOutput= new PipedOutputStream(pInput);
方法之二是利用雙方類中的任一個成員函數 connect()相連接
PipedInputStream pInput=new PipedInputStream();
PipedOutputStream pOutput= new PipedOutputStream();
pinput.connect(pOutput);
5 管道的輸入與輸出:
輸出管道對象調用write()成員函數輸出數據(即向管道的輸入端發送數據);而輸入管道對象調用read()成員函數可以讀起數據(即從輸出管道中獲得數據)。這主要是藉助系統所提供的緩沖機制來實現的。
6隨機文件讀寫:
RandomAccessFile類(它直接繼承於Object類而非InputStream/OutputStream類),從而可以實現讀寫文件中任何位置中的數據(只需要改變文件的讀寫位置的指針)。
隨機文件讀寫編程的基本過程為:
① 生成流對象並且指明讀寫類型;
② 移動讀寫位置;
③ 讀寫文件內容;
④ 關閉文件。

七里河團隊答疑助人,希望我的回答對你有所幫助非常感謝您的耐心觀看,如有幫助請採納,祝生活愉快!謝謝!

③ JAVA IO 對象的讀寫問題

java序列化
2008-03-10 10:37
1、序列化是干什麼的?
簡單說就是為了保存在內存中的各種對象的狀態(也就是實例變數,不是方法),並且可以把保存的對象狀態再讀出來。雖然你可以用你自己的各種各樣的方法來保存object states,但是Java給你提供一種應該比你自己好的保存對象狀態的機制,那就是序列化。

2、什麼情況下需要序列化
a)當你想把的內存中的對象狀態保存到一個文件中或者資料庫中時候;
b)當你想用套接字在網路上傳送對象的時候;
c)當你想通過RMI傳輸對象的時候;

3、當對一個對象實現序列化時,究竟發生了什麼?
在沒有序列化前,每個保存在堆(Heap)中的對象都有相應的狀態(state),即實例變數(instance ariable)比如:
java 代碼Foo myFoo = new Foo();
myFoo .setWidth(37);
myFoo.setHeight(70);

當 通過下面的代碼序列化之後,MyFoo對象中的width和Height實例變數的值(37,70)都被保存到foo.ser文件中,這樣以後又可以把它 從文件中讀出來,重新在堆中創建原來的對象。當然保存時候不僅僅是保存對象的實例變數的值,JVM還要保存一些小量信息,比如類的類型等以便恢復原來的對 象。
java 代碼FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myFoo);

4、實現序列化(保存到一個文件)的步驟
a)Make a FileOutputStream java 代碼FileOutputStream fs = new FileOutputStream("foo.ser");
b)Make a ObjectOutputStream
java 代碼ObjectOutputStream os = new ObjectOutputStream(fs);
c)write the object
java 代碼os.writeObject(myObject1);
os.writeObject(myObject2);
os.writeObject(myObject3);
d) close the ObjectOutputStream
java 代碼os.close();

5、舉例說明
java 代碼import java.io.*;

public class Box implements Serializable
{
private int width;
private int height;

public void setWidth(int width){
this.width = width;
}
public void setHeight(int height){
this.height = height;
}

public static void main(String[] args){
Box myBox = new Box();
myBox.setWidth(50);
myBox.setHeight(30);

try{
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myBox);
os.close();
}catch(Exception ex){
ex.printStackTrace();
}
}

}

//讀取的代碼類似這樣的
FileInputStream istream = new FileInputStream("foo.ser"); // 輸入流
ObjectInputStream pr = new ObjectInputStream(istream); // 綁定
Box myBox2 = (Box)pr.readObject(); // 讀入序列化的類
istream.close();

6、相關注意事項
a)序列化時,只對對象的狀態進行保存,而不管對象的方法;
b)當一個父類實現序列化,子類自動實現序列化,不需要顯式實現Serializable介面;
c)當一個對象的實例變數引用其他對象,序列化該對象時也把引用對象進行序列化;
d)並非所有的對象都可以序列化,,至於為什麼不可以,有很多原因了,比如:
1.安全方面的原因,比如一個對象擁有private,public等field,對於一個要傳輸的對象,比如寫到文件,或者進行rmi傳輸 等等,在序列化進行傳輸的過程中,這個對象的private等域是不受保護的。
2. 資源分配方面的原因,比如socket,thread類,如果可以序列化,進行傳輸或者保存,也無法對他們進行重新的資源分 配,而且,也是沒有必要這樣實現。

④ Java文件讀寫

實用的模糊(通配符)文件查找程序

1 import java.io.File;
2 import java.util.regex.Matcher;
3 import java.util.regex.Pattern;
4 import java.util.ArrayList;
5
6 /** *//**
7 * <p>Title: FileService </p> 8* <p>Description: 獲取文件 </p> 9* <p>Copyright: Copyright (c) 2007</p>
10* <p>Company: </p>
11* @author not attributable
12* @version 1.0
13*/
14public class FileService {
15 public FileService() {
16 }
17
18 /** *//**
19 * 在本文件夾下查找
20 * @param s String 文件名
21 * @return File[] 找到的文件
22 */
23 public static File[] getFiles(String s)
24 {
25 return getFiles("./",s);
26 }
27
28 /** *//**
29 * 獲取文件
30 * 可以根據正則表達式查找
31 * @param dir String 文件夾名稱
32 * @param s String 查找文件名,可帶*.?進行模糊查詢
33 * @return File[] 找到的文件
34 */
35 public static File[] getFiles(String dir,String s) {
36 //開始的文件夾
37 File file = new File(dir);
38
39 s = s.replace('.', '#');
40 s = s.replaceAll("#", "\\\\.");

⑤ JAVA中如何實現文件讀寫對象急吖

java中引進了I/O包用於對文件的處理,你說的文件處理對象是file類,若要對其進行輸入輸出處理的話,需要進行如下幾步:1 創建文件對象:File file1=new File("文件目錄");
2 用這個文件對像創建文件讀寫對象:FileInputStream inputstream=new FileInputStream (file1);
這是文件讀對象,對應的寫對象就是把FileInputStream改成FileOutputStream就可以,

希望能幫上你!!

⑥ Java 如何對文件進行多個Object對象流的讀寫操作

思路:把已經序列化的對象存入容器(如LinkedList<?>)中,然後用ObjectInputStream和ObjectOutputStream對這個實例化的LinkedList<?>對象進行讀寫。測試主程序:/** * @Title: FileRW.java * @Package com.file * @Description: 文件、文件夾的創建、寫入練習。讀寫是使用對象流實現。 * @author 慢跑學Android * @date 2011-11-19 下午03:53:01 * @version V1.0 */ package com.file; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.LinkedList; public class FileRW { private String dirPath; private String filename; public static void main(String[] args) { String path = "C:\\曉聲"; String fileName = "test.txt"; FileRW fileRW = new FileRW(path, fileName); LinkedList<TestMessage> msgOut = new LinkedList<TestMessage>(); LinkedList<TestMessage> msgIn = null; msgOut.add(new TestMessage("柯南", "偶像")); msgOut.add(new TestMessage("卡卡西", "好樣的")); msgOut.add(new TestMessage("Android", "Android")); msgOut.add(new TestMessage("哈哈", "測試下喔")); fileRW.writeObject(path, fileName, msgOut); msgIn = fileRW.readObject(path,fileName); for(TestMessage temp:msgIn) { System.out.println(temp.getName() + temp.getData()); } } public FileRW(String dirPath, String filename) { this.dirPath = dirPath; this.filename = filename; if (creatDir()) { creatFile(); } } private boolean creatDir() { if (null != dirPath) { File path = new File(dirPath); if (path.exists()) { return true; } if (true == path.mkdirs() ) { return true; } } return false; } private void creatFile() { if (null != filename) { File file = new File(dirPath, filename); if (false == file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } } } /** * @Title: writeObject * @Description: Write a object to a file. * @param path the directory of the target file * @param filename the name of the target file * @param msg the type of the object * @return void * @throws */ private void writeObject(String path, String filename, LinkedList<TestMessage> msg) { File file = new File(path, filename); if (false == file.isFile()) { return ; } try { // The value "false" for FileOutputStream means that overwrite this file, // if it is "true",append the new data to this file. ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file,false)); oos.writeObject(msg); oos.flush(); oos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * @Title: readObject * @Description: Read a object from a file. * @param path the directory of the target file * @param filename the name of the target file * @return LinkedList<TestMessage> * @throws */ @SuppressWarnings("unchecked") private LinkedList<TestMessage> readObject(String path, String filename) { File file = new File(path, filename); ObjectInputStream ois = null; LinkedList<TestMessage> msgAll = null; try { ois = new ObjectInputStream(new FileInputStream(file)); try { msgAll = (LinkedList<TestMessage>)ois.readObject(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { ois.close(); } catch (IOException e) { e.printStackTrace(); } } return msgAll; } } 測試程序中的消息包定義:/** * @Title: TestMessage.java * @Package com.file * @Description: FileRW的消息流 * @author 慢跑學Android * @date 2011-11-19 下午04:35:11 * @version V1.0 */ package com.file; public class TestMessage implements java.io.Serializable { private String name; private String data; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getData() { return data; } public void setData(String data) { this.data = data; } public TestMessage(String name, String msg) { this.name = name; data = msg; } } 程序運行結果:參考資料:ObjectInputStream類和ObjectOutputStream類的使用

⑦ java中用流對象去讀寫文件,讀寫完畢,調用流對象的close方法後,還用將流對象置為null嗎

先判斷流對象是否為空,然後關閉流對象就可以了,沒必要設置為空,流所佔的資源已經被釋放了。

閱讀全文

與java對象讀寫相關的資料

熱點內容
各種直線命令詳解 瀏覽:859
程序員淚奔 瀏覽:143
素材怎麼上傳到伺服器 瀏覽:513
android百度離線地圖開發 瀏覽:187
web可視化編程軟體 瀏覽:288
java筆試編程題 瀏覽:742
win11什麼時候可以裝安卓 瀏覽:560
java不寫this 瀏覽:999
雲點播電影網php源碼 瀏覽:95
pythonclass使用方法 瀏覽:226
移動加密軟體去哪下載 瀏覽:294
php彈出alert 瀏覽:209
吉林文檔課件加密費用 瀏覽:136
感測器pdf下載 瀏覽:289
隨車拍app綁定什麼設備 瀏覽:898
方維團購系統源碼 瀏覽:993
linux反彈shell 瀏覽:159
列印機介面加密狗還能用嗎 瀏覽:301
二板股票源碼 瀏覽:448
度人經pdf 瀏覽:902