IO,對象傳輸的基石(二)

2020-12-01 標準Java

一、前言

二、順序流(合併流)

2.1 順序流定義 / 合併流定義

JavaIO流——合併流/順序流(SequenceInputStream):,就是把多個輸入流,合併成一個流對象,且見代碼1。

2.2 代碼:順序流/合併流

代碼1——合併流:

package mypackage;import java.io.FileInputStream;import java.io.SequenceInputStream;//合併流/順序流(SequenceInputStream):// 就是把多個輸入流,合併成一個流對象.public class Test { public static void main(String[] args) throws Exception { // 不同輸入流有不同對應txt文件,將輸入流合併後,合併後的輸入流可以操作多個文件 SequenceInputStream sequenceInputStream = new SequenceInputStream( new FileInputStream("stream1.txt"), new FileInputStream("stream2.txt")); byte[] buffer = new byte[1024]; int len = -1; while ((len = sequenceInputStream.read(buffer)) != -1) { System.out.println(new String(buffer, 0, len)); } sequenceInputStream.close(); }}


輸出1:

Java程式設計師就業前景好,薪資高!一起來學習Java吧!

小結1:

1、合併流對應的對象是輸入流,是對輸入流合併,不是對輸出流合併;

2、合併的是兩個輸入流而不是兩個源文件:因為不同輸入流有不同對應txt文件,用合併流將兩個輸入流合併後,可以輸入兩個文件,所以說,合併的是兩個輸入流而不是兩個源文件。

3、合併流可以接收合併流作為實際參數,形成多個流的合併,也稱合併嵌套。

2.3 面試金手指:合併流/順序流

合併流定義:JavaIO流——合併流,接收兩個輸入流作為參數,合併兩個輸入流或合併流,對外形成一個更大的流,方便客戶端操作。
合併流需要注意的點:
1、合併流對應的對象是輸入流,是對輸入流合併,不是對輸出流合併;
2、因為不同輸入流有不同對應txt文件,用合併流將兩個輸入流合併後,可以輸入兩個文件,注意合併的是兩個輸入流而不是兩個源文件。
3、合併流可以接收合併流作為實際參數,形成多個流的合併,也稱合併嵌套。

三、對象流(序列化和反序列化)

3.1 對象流 提供一種 序列化/反序列化 的實現方式

1.1 序列化和反序列化定義:
序列化: 指把堆內存中的Java對象數據,通過某種方式把對象存儲到磁碟文件中或者傳遞給其他網絡的節點(在網絡上傳輸). 我們把這個過程稱之為序列化.
反序列化:把磁碟文件中的對象數據或者把網絡節點上的對象數據,恢復成Java對象的過程.

1.2 為什麼要做序列化:
1):在分布式系統中,需要共享的數據的JavaBean對象,都得做序列化,此時需要把對象再網絡上傳輸,此時就得把對象數據轉換為二進位形式.以後存儲在HttpSession中的對象,都應該實現序列化接口(只有實現序列化接口的類,才能做序列化操作).
2):服務鈍化:如果服務發現某些對象好久都沒有活動了,此時伺服器就會把這些內存中的對象,持久化在本地磁碟文件中(Java對象–>二進位文件). 如果某些對象需要活動的時候,現在內存中去尋找,找到就使用,找不到再去磁碟文件中,反序列化我們得對象數據,恢復成Java對象.

1.3 Java對象流——JavaIO流中實現序列化的方式
使用對象流來完成序列化和反序列化操作:
ObjectOutputStream: 通過writeObject方法做序列化操作的.
ObjectInputStream: 通過readObject方法做反序列化操作的.
ObjectOutputStream ObjectInputStream,提供一種序列化方式,序列化方式有很多,現在網際網路大廠常用的是protobuf,最高效的系列化方式

3.2 代碼:對象流

3.2.1 實體類 沒有實現序列化接口

代碼1:

package mypackage;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;//對象流 ObjectInputpublic class Test { public static void main(String[] args) throws Exception { File file = new File("object.txt"); writeObject(file); readObject(file); } private static void writeObject(File file) throws Exception { ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file)); objectOutputStream.writeObject(new Person("小明", 12)); objectOutputStream.close(); } private static void readObject(File file) throws Exception { ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file)); Person person = (Person) objectInputStream.readObject(); System.out.println(person); objectInputStream.close(); }}class Person { // 實體類沒有實現序列化接口Serializable private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; }}

輸出1:

Exception in thread "main" java.io.NotSerializableException: mypackage.Person at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) at mypackage.Test.writeObject(Test.java:20) at mypackage.Test.main(Test.java:14)

小結1:因為實體類Person沒有實現序列化接口Serializable,所以這裡程序拋出異常java.io.NotSerializableException

3.2.2 實體類 序列化 + 不指定序列化版本號

代碼2:

package mypackage1;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;//對象流 ObjectInputpublic class Test { public static void main(String[] args) throws Exception { File file = new File("object.txt"); writeObject(file); readObject(file); } private static void writeObject(File file) throws Exception { ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file)); objectOutputStream.writeObject(new Person("小明", 12)); objectOutputStream.close(); } private static void readObject(File file) throws Exception { ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file)); Person person = (Person) objectInputStream.readObject(); System.out.println(person); objectInputStream.close(); }}class Person implements Serializable { // 和代碼1的唯一不同,實體類實現Serializable接口 private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; }}

輸出2:

Person [name=小明, age=12]

小結2:實體類Person實現序列化接口後,成功解決了程序異常,一般來說,隨著項目的升級,系統的class文件也會升級(增加一個欄位/刪除一個欄位), Java通過serialVersionUID(序列化版本號)來判斷字節碼是否發生改變.所以我們為實體類Person添加一個序列化版本號。

3.2.3 實體類 序列化 + 指定序列化版本號

代碼3:

package mypackage2;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;//對象流 ObjectInputpublic class Test { public static void main(String[] args) throws Exception { File file = new File("object.txt"); writeObject(file); readObject(file); } private static void writeObject(File file) throws Exception { ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file)); objectOutputStream.writeObject(new Person("小明", 12)); objectOutputStream.close(); } private static void readObject(File file) throws Exception { ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file)); Person person = (Person) objectInputStream.readObject(); System.out.println(person); objectInputStream.close(); }}class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; }}

輸出3:

Person [name=小明, age=12]

小結3:給實體類Person加上序列化版本號之後,整個問題正是解決。

3.3 面試金手指:對象流 提供一種 序列化/反序列化 的實現方式

1.1 序列化和反序列化定義:
序列化: 指把堆內存中的Java對象數據,通過某種方式把對象存儲到磁碟文件中或者傳遞給其他網絡的節點(在網絡上傳輸). 我們把這個過程稱之為序列化.
反序列化:把磁碟文件中的對象數據或者把網絡節點上的對象數據,恢復成Java對象的過程.

1.2 為什麼要做序列化:
1):在分布式系統中,需要共享的數據的JavaBean對象,都得做序列化,此時需要把對象再網絡上傳輸,此時就得把對象數據轉換為二進位形式.以後存儲在HttpSession中的對象,都應該實現序列化接口(只有實現序列化接口的類,才能做序列化操作).
2):服務鈍化:如果服務發現某些對象好久都沒有活動了,此時伺服器就會把這些內存中的對象,持久化在本地磁碟文件中(Java對象–>二進位文件). 如果某些對象需要活動的時候,現在內存中去尋找,找到就使用,找不到再去磁碟文件中,反序列化我們得對象數據,恢復成Java對象.

1.3 Java對象流——JavaIO流中實現序列化的方式
使用對象流來完成序列化和反序列化操作:
ObjectOutputStream: 通過writeObject方法做序列化操作的.
ObjectInputStream: 通過readObject方法做反序列化操作的.
ObjectOutputStream ObjectInputStream,提供一種序列化方式,序列化方式有很多,現在網際網路大廠常用的是protobuf,最高效的系列化方式

代碼1:因為實體類Person沒有實現序列化接口Serializable,所以這裡程序拋出異常java.io.NotSerializableException。

代碼2:實體類Person實現序列化接口後,成功解決了程序異常,一般來說,隨著項目的升級,系統的class文件也會升級(增加一個欄位/刪除一個欄位), Java通過serialVersionUID(序列化版本號)來判斷字節碼是否發生改變.所以我們為實體類Person添加一個序列化版本號。

代碼3:給實體類Person加上序列化版本號之後,整個問題正是解決。

JavaIO流——對象流通過writeObject()或readObject()實現序列化和反序列化,在磁碟讀寫和網絡請求中保證數據的正確性。

四、與控制臺相關:列印流 + 掃描流

4.1 列印流定義 + 掃描流定義

列印流定義:
列印到控制臺;解釋了System.out.println()底層原理,System.out.println();其實等價於 PrintStream ps = System.out; ps.println(),且見代碼1;

掃描流定義:
與列印流對應,解釋了控制到輸入底層原理,本質上是java.util.Scanner類:掃描器類,表示輸入操作,且見代碼2。

4.2 代碼:列印流 + 掃描流

4.2.1 列印流的使用

代碼1——列印流:

package mypackage_列印流;//System.out.println();其實等價於 PrintStream ps = System.out; ps.println()//Java public class Test { public static void main(String[] args) { String name = "小明"; int age = 12; // 一般輸出 System.out.println("name: " + name + " ,age: " + age); // 列印流輸出 String format = "name: %s ,age: %d"; Object[] data = { "小明", 12 }; System.out.printf(format, data); System.out.println(); // 列印流簡化輸出 System.out.printf("name: %s ,age: %d", data); }}

輸出1:

name: 小明 ,age: 12name: 小明 ,age: 12name: 小明 ,age: 12

小結1:列印流為Java提供了一種類似於C/C++的格式化列印,其實只是一種列印的補充格式。因為在Java語言中,System.out.println()通過+號重載可以實現字符串拼接,可以拼接出任何列印格式,所以說System.out.printf()只是提供了另一種列印格式的輸出方式。

4.2.2 掃描流的使用

代碼2——掃描流:

package mypackage_掃描類;import java.util.Scanner;//java.util.Scanner類:掃描器類,表示輸入操作.//存在的方法: xxx表示數據類型,如byte,int ,boolean等.// boolean hasNextXxx():判斷是否有下一種類型的數據// Xxx nextXxx():獲取下一個該類型的數據.public class Test { public static void main(String[] args) { Scanner scanner = new Scanner("Java程式設計師就業前景好,薪資高!一起來學習Java吧!"); while (scanner.hasNextLine()) { String line = scanner.nextLine(); System.out.println(line); } scanner.close(); }}

輸出2:

Java程式設計師就業前景好,薪資高!一起來學習Java吧!

小結2:掃描類中,hasNextXxx()和nextXxx()兩個方法,將字符串內容(也可以是其他內容txt、數組、boolean等)列印出來。

4.3 面試金手指:列印流 + 掃描流

列印流定義:
(1)列印到控制臺;
(2)解釋了System.out.println()底層原理,System.out.println();其實等價於 PrintStream ps =
System.out; ps.println(),且見代碼1;

掃描流定義:
與列印流對應,解釋了控制到輸入底層原理,本質上是java.util.Scanner類:掃描器類,表示輸入操作,且見代碼2。

代碼1:列印流為Java提供了一種類似於C/C++的格式化列印,其實只是一種列印的補充格式。因為在Java語言中,System.out.println()通過+號重載可以實現字符串拼接,可以拼接出任何列印格式,所以說System.out.printf()只是提供了另一種列印格式的輸出方式。

代碼2:掃描類中,hasNextXxx()和nextXxx()兩個方法,將字符串內容(也可以是其他內容txt、數組、boolean等)列印出來。

注意:Java BIO流中,列印流用於列印到控制臺,掃描流用於讀入,甚至可將兩個流放在一起寫一個demo,可以嘗試一下。

五、數據流:提供了可以讀/寫任意數據類型的方法

5.1 數據流定義:提供了可以讀/寫任意數據類型的方法,兩個實現類,每個實現類都有writeXxx()和readXxx()方法

數據流定義:提供了可以讀/寫任意數據類型的方法,分別是:
DataOutputStream: 提供了 writeXxx(xxx value)方法.
DataInputStream: 提供了 readXxx()方法.
注意: writeXxx和readXxx必須要對應起來, writeByte寫出的數據,此時只能使用readByte讀取回來.且見代碼1.

5.2 代碼:數據流

代碼1——數據流讀寫任意類型數據:

package mypackage;//數據流,提供了可以讀/寫任意數據類型的方法://DataOutputStream: 提供了 writeXxx(xxx value)方法.//DataInputStream: 提供了 readXxx()方法.// 注意: writeXxx和readXxx必須要對應起來, writeByte寫出的數據,此時只能使用readByte讀取回來.import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;public class Test { // 先寫出到data.txt文件中去,然後再讀入程序,再列印出來 public static void main(String[] args) throws Exception { File file = new File("data.txt"); write(file); read(file); } private static void read(File file) throws Exception { DataInputStream dataInputStream = new DataInputStream(new FileInputStream(file)); System.out.println(dataInputStream.readByte()); System.out.println(dataInputStream.readChar()); System.out.println(dataInputStream.readUTF()); dataInputStream.close(); } private static void write(File file) throws Exception { DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(file)); dataOutputStream.writeByte(12); dataOutputStream.writeChar('男'); dataOutputStream.writeUTF("小明"); dataOutputStream.close(); }}

輸出1:

12男小明

小結1:理論上,數據流可以讀寫任意類型的數據,8種基本類型(boolean char float double byte short int long),字符串(readChars、readUTF),數組(int數組、byte數組),程序(代碼1)為縮減程序,只寫了三種(byte char utf字符串)。

5.3 面試金手指:數據流

數據流定義:提供了可以讀/寫任意數據類型的方法,兩個實現類,每個實現類都有writeXxx()和readXxx()方法。
分別是:
DataOutputStream: 提供了 writeXxx(xxx value)方法.
DataInputStream: 提供了 readXxx()方法.
注意: writeXxx和readXxx必須要對應起來, writeByte寫出的數據,此時只能使用readByte讀取回來.且見代碼1.

數據流的使用:提供了可以讀/寫任意數據類型的方法,任意數據類型是指8種基本類型(boolean char float double byte short int long),字符串(readChars、readUTF),數組(int數組、byte數組),均有相應的readXxx()和WriteXxx()方法。

六、管道流:實現兩個線程之間的數據交互

6.1 管道流定義:實現兩個線程之間的數據交互,四個實現類

Java管道流定義:實現兩個線程之間的數據交互。
包括四種:管道字節輸入流PipedInputStream、管道字節輸出流PipedOutputStream、
管道字符輸入流PipedReder、管道字符輸出流PipedWriter。

6.2 代碼:管道流

管道字節輸入流PipedInputStream、管道字節輸出流PipedOutputStream:

package mypackage;import java.io.PipedInputStream;import java.io.PipedOutputStream;//管道流:實現兩個線程之間的數據交互.//PipedInputStream//PipedOutputStream//PipedReder//PipedWriter//ThreadA使用寫出流不斷寫出,ThreadB中注入ThreadA引用,讀取ThreadA寫出流中的內容,不斷列印到控制臺public class Test { public static void main(String[] args) throws Exception { ThreadA threadA = new ThreadA(); ThreadB threadB = new ThreadB(threadA); threadA.start(); threadB.start(); }}class ThreadA extends Thread { private PipedOutputStream pipedOutputStream = new PipedOutputStream(); public PipedOutputStream getOut() { return pipedOutputStream; } @Override public void run() { // run()方法中定義這個線程啟動後具體幹什麼事情 try { for (int i = 65; i < 65 + 26; i++) { pipedOutputStream.write(i); } pipedOutputStream.close(); } catch (Exception e) { e.printStackTrace(); } }}class ThreadB extends Thread { PipedInputStream pipedInputStream = null; public ThreadB(ThreadA threadA) throws Exception { pipedInputStream = new PipedInputStream(threadA.getOut()); } @Override public void run() { try { int len = -1; while ((len = pipedInputStream.read()) != -1) { System.out.print((char) len); } pipedInputStream.close(); } catch (Exception e) { e.printStackTrace(); } }}

輸出1:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

1、新建一個ThreadA線程,ThreadA使用管道寫出流不斷寫出,ThreadB中注入ThreadA引用,讀取ThreadA寫出流中的內容,不斷列印到控制臺。
2、不管哪個線程,run()方法中定義這個線程啟動後具體幹什麼事情,ThreadA的run()方法就是不斷寫出,ThreadB的run()就是讀取ThreadA寫出流中的內容,不斷列印到控制臺。

6.3 面試金手指:管道流

Java管道流定義:實現兩個線程之間的數據交互。
1、新建一個ThreadA線程,ThreadA使用管道寫出流不斷寫出,ThreadB中注入ThreadA引用,讀取ThreadA寫出流中的內容,不斷列印到控制臺。
2、不管哪個線程,run()方法中定義這個線程啟動後具體幹什麼事情,ThreadA的run()方法就是不斷寫出,ThreadB的run()就是讀取ThreadA寫出流中的內容,不斷列印到控制臺。

七、面試金手指

7.1 順序流 / 合併流 (定義 + 作用)

合併流定義:JavaIO流——合併流,接收兩個輸入流作為參數,合併兩個輸入流或合併流,對外形成一個更大的流,方便客戶端操作。

合併流需要注意的點:
1、合併流對應的對象是輸入流,是對輸入流合併,不是對輸出流合併;
2、因為不同輸入流有不同對應txt文件,用合併流將兩個輸入流合併後,可以輸入兩個文件,注意合併的是兩個輸入流而不是兩個源文件。
3、合併流可以接收合併流作為實際參數,形成多個流的合併,也稱合併嵌套。

7.2 對象流:提供一種序列化/反序列化的實現方式

1.1 序列化和反序列化定義:
序列化: 指把堆內存中的Java對象數據,通過某種方式把對象存儲到磁碟文件中或者傳遞給其他網絡的節點(在網絡上傳輸). 我們把這個過程稱之為序列化.
反序列化:把磁碟文件中的對象數據或者把網絡節點上的對象數據,恢復成Java對象的過程.

1.2 為什麼要做序列化:
1):在分布式系統中,需要共享的數據的JavaBean對象,都得做序列化,此時需要把對象再網絡上傳輸,此時就得把對象數據轉換為二進位形式.以後存儲在HttpSession中的對象,都應該實現序列化接口(只有實現序列化接口的類,才能做序列化操作).
2):服務鈍化:如果服務發現某些對象好久都沒有活動了,此時伺服器就會把這些內存中的對象,持久化在本地磁碟文件中(Java對象–>二進位文件). 如果某些對象需要活動的時候,現在內存中去尋找,找到就使用,找不到再去磁碟文件中,反序列化我們得對象數據,恢復成Java對象.

1.3 Java對象流——JavaIO流中實現序列化的方式
使用對象流來完成序列化和反序列化操作:
ObjectOutputStream: 通過writeObject方法做序列化操作的.
ObjectInputStream: 通過readObject方法做反序列化操作的.
ObjectOutputStream ObjectInputStream,提供一種序列化方式,序列化方式有很多,現在網際網路大廠常用的是protobuf,最高效的系列化方式

代碼1:因為實體類Person沒有實現序列化接口Serializable,所以這裡程序拋出異常java.io.NotSerializableException。

代碼2:實體類Person實現序列化接口後,成功解決了程序異常,一般來說,隨著項目的升級,系統的class文件也會升級(增加一個欄位/刪除一個欄位), Java通過serialVersionUID(序列化版本號)來判斷字節碼是否發生改變.所以我們為實體類Person添加一個序列化版本號。

代碼3:給實體類Person加上序列化版本號之後,整個問題正是解決。

JavaIO流——對象流通過writeObject()或readObject()實現序列化和反序列化,在磁碟讀寫和網絡請求中保證數據的正確性。

7.3 與控制臺相關:列印流 + 掃描流

列印流定義:
(1)列印到控制臺;
(2)解釋了System.out.println()底層原理,System.out.println();其實等價於 PrintStream ps = System.out; ps.println(),且見代碼1;

掃描流定義:
與列印流對應,解釋了控制到輸入底層原理,本質上是java.util.Scanner類:掃描器類,表示輸入操作,且見代碼2。

代碼1:列印流為Java提供了一種類似於C/C++的格式化列印,其實只是一種列印的補充格式。因為在Java語言中,System.out.println()通過+號重載可以實現字符串拼接,可以拼接出任何列印格式,所以說System.out.printf()只是提供了另一種列印格式的輸出方式。

代碼2:掃描類中,hasNextXxx()和nextXxx()兩個方法,將字符串內容(也可以是其他內容txt、數組、boolean等)列印出來。

注意:Java BIO流中,列印流用於列印到控制臺,掃描流用於讀入,甚至可將兩個流放在一起寫一個demo,可以嘗試一下。

7.4 數據流:提供了可以讀/寫任意數據類型的方法,兩個實現類,每個實現類都有writeXxx()和readXxx()方法

數據流定義:提供了可以讀/寫任意數據類型的方法,兩個實現類,每個實現類都有writeXxx()和readXxx()方法。
分別是:
DataOutputStream: 提供了 writeXxx(xxx value)方法.
DataInputStream: 提供了 readXxx()方法.
注意: writeXxx和readXxx必須要對應起來, writeByte寫出的數據,此時只能使用readByte讀取回來.且見代碼1.

數據流的使用:提供了可以讀/寫任意數據類型的方法,任意數據類型是指8種基本類型(boolean char float double byte short int long),字符串(readChars、readUTF),數組(int數組、byte數組),均有相應的readXxx()和WriteXxx()方法。

7.5 管道流:實現兩個線程之間的數據交互

Java管道流定義:實現兩個線程之間的數據交互。
1、新建一個ThreadA線程,ThreadA使用管道寫出流不斷寫出,ThreadB中注入ThreadA引用,讀取ThreadA寫出流中的內容,不斷列印到控制臺。
2、不管哪個線程,run()方法中定義這個線程啟動後具體幹什麼事情,ThreadA的run()方法就是不斷寫出,ThreadB的run()就是讀取ThreadA寫出流中的內容,不斷列印到控制臺。

八、尾聲

IO,對象傳輸的基石(二),完成了。

天天打碼,天天進步!!!


如果覺得本文有用,可以關注+轉發,您的鼓勵就是我創作的最大動力。

相關焦點

  • IO,對象傳輸的基石(一)
    2):創建IO流對象(水管).輸入操作: 創建輸入流對象.輸出操作: 創建輸出流對象.3):具體的IO操作.輸入操作: 輸入流對象的read方法.輸出操作: 輸出流對象的write方法.4):關閉資源(勿忘). 一旦資源關閉之後,就不能使用流對象了,否則報錯.
  • Netty結合Protostuff傳輸35萬個對象案例
    important}單純netty結合protostuff進行rpc對象傳輸的demo網上有很多,大部分都是一個模子刻出來的再看encoder,編碼器,首先將要傳輸的對象用ProtostuffUtils序列化為byte
  • IO知識點學習
    1 IO概述IO指數據的傳輸,可以看作是數據的一種流動,按照流的方向,以內存為基準,輸入input和輸出output,流向內存的叫輸入流,流出內存的叫輸出流。2 字節流2.1 一切皆為字節一切數據在存儲時,都是以二進位數字的形式保存
  • 在程序中如何正確地創建和銷毀軟體應用系統中文件IO流對象實例
    (1)為什麼要採用流的機制實現數據的讀寫功能 Java語言通過提供對IO流的技術支持,為軟體應用系統的IO操作提供與存儲設備和作業系統無關的輸入輸出實現技術——軟體應用系統的開發人員不再需要考慮Windows作業系統和Unix作業系統之間在文件管理方面的不同點;並可以實現以相同的程序實現方式處理數據的流動(讀寫)、傳輸
  • JAVA IO Stream流總結
    我們把這種數據的傳輸,可以看做是一種數據的流動,按照流動的方向,以內存為基準,分為 輸入input 和 輸出 output ,即流向內存是輸入流,流出內存的輸出流。Java中I/O操作主要是指使用 java.io 包下的內容,進行輸入、輸出操作。輸入也叫做讀取數據,輸出也叫做作寫 出數據。一.java.io.File 類1.
  • java——io流總概述
    1.什麼是io流io流就是以流的方式進行數據的傳輸,流可以看作是數據內容的一個載體亦或者是一個數據傳輸的管道。當我們上傳或者在網上下載東西的時候數據都是通過流的方式進行傳輸,說白了就是不斷地向流中提取和插入數據。
  • Java IO流詳解(面試不要再問我IO流)
    字節輸入流 InputStreamjava.io 包下所有的字節輸入流都繼承自 InputStream,並且實現了其中的方法。InputStream 中提供的主要數據操作方法如下:int read():從輸入流中讀取一個字節的二進位數據。int read(byte[] b):將多個字節讀到數組中,填滿整個數組。
  • Java中IO流的通俗講義
    這樣也就實現了數據的傳輸。6、序列化對象的操作(Object)前面我們講的是如何讀取文件,實際上通過流也可以讀取對象。 什麼是對象的序列化? 序列化是將內存中的對象轉換為二進位數據流的形式輸出,保存到硬碟。 在Java中,並不是所有的類的對象都可以被序列化,如果一個類對象需要被序列化,則此類必須實現java.io.Serializable接口。
  • java中的IO流(字符流和字節流)
    字節流是8位二進位,佔一個字節,只包含英文,中文是16位二進位,佔2個字節,1個字符。字節流讀取中文是不可以的。什麼是Unicode?Unicode(統一碼、萬國碼、單一碼)是計算機科學領域裡的一項業界標準,包括字符集、編碼方案等。
  • 深入java io底層(上)
    1.io流的概念把這些不同類型的輸入、輸出源抽象為流(Stream),其中輸入或輸出的數據稱為數據流(Data Stream),用統一的接口來表示;2.io流的分類按照流向分:3.字節輸入流常用數據操作方法int read():從輸入流中讀取一個字節的二進位數據;int read(byte[] b):將多個字節讀到數組中,填滿整個數組;int
  • Java編程IO基礎之二:OutputStream字節輸出流類
    按照面向對象的開發原則,子類要為抽象類進行對象的實例化,而後調用的方法以父類中定義的方法為主,而具體的實現是實例化這個父類的子類完成的,也就是說在整個的操作中,用戶最關心的只有子類的構造方法。void write( byte[ ] b , int off , int len )throws IOException 輸出部分字節數據示例:使用OutputStream向文件中追加數據,輸出路徑為:D:\StreamTest\test.txt代碼:import java.io.File
  • Swipe.io超45萬易主,一個被低估的域名後綴.io!
    而在程式設計師的二進位世界中,.io更像是一種解不開的緣分,它可以代表1和0,代表著科技界最頂級的技術。在全球,知名科技企業註冊的.io域名並啟用建站的案例也是非常多的,例如:tuition.io、test.io、blockr.io等等。
  • 實戰 | Netty+Protostuff實現單機壓測秒級接收35萬個對象
    >【034期】JavaEE面試題(六)Hibernate【035期】JavaEE面試題(七)SpringBoot(1)更多內容,點擊上面藍字查看單純netty結合protostuff進行rpc對象傳輸的
  • Node.JS和Socket.io入門
    現在讓我們開始使用Socket.io首先,我們必須在主伺服器上啟動Socket.io子伺服器。在server.js中:更換:app.listen(port); 為:var io = require('socket.io').listen(app.listen(port));這使Socket.io可以訪問伺服器
  • Flask-SocketIO 簡單使用指南
    可以從以下三個選項中選擇此程序包所依賴的異步服務:eventlet 性能最佳,支持長輪詢和 WebSocket 傳輸。gevent 在許多不同的配置中得到支持。gevent 包完全支持長輪詢傳輸,但與 eventlet 不同,gevent 沒有本機 WebSocket 支持。
  • Java 高性能的異步網絡IO傳輸
    所以,使用異步設計的方法來提升IO性能,我們更需關注如何實現高性能異步網絡傳輸。理想的異步網絡框架程序如果要實現通過網絡傳輸數據,需用到開發語言提供的網絡通信類庫。大部分語言提供的網絡通信基礎類庫都是同步。一個TCP連接建立後,用戶代碼會獲得個收發數據的通道。每個通道會在內存中開闢兩片區域用於收發數據緩存。
  • 實戰 | Netty實現單機壓測秒級接收35萬個對象
    單純netty結合protostuff進行rpc對象傳輸的demo網上有很多,大部分都是一個模子刻出來的,一開始我也是抄了一個,本地測試暢通無阻,未發生任何異常。部署預發環境,進行壓測後,問題巨多,各種報錯層出不窮。
  • 一篇文章快速了解Java中的IO流
    這些類可以分為文本 I/O 類(text I/O class)和二進位 I/O 類(binary I/O class)。輸入對象(輸入流)讀取外部數據(磁碟、光碟等存儲設備的數據)到程序(內存)中,操作過程中,我們是以 程序(內存)的角度。輸出對象(輸出流)將程序(內存)數據輸出到磁碟、光碟等存儲設備中。
  • 實戰|Netty+Protostuff實現單機壓測秒級接收35萬個對象
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫單純netty結合protostuff進行rpc對象傳輸的demo網上有很多,大部分都是一個模子刻出來的,一開始我也是抄了一個,本地測試暢通無阻,未發生任何異常。
  • 談談IO流系列之字符輸出流Writer
    使用字符輸出流一次寫入多個字符字符輸出流的續寫和換行下面開始今天學習一、初次相識字符輸出流Writer並理解java.io.Writer:字符輸出流,是所有字符輸出流的最頂層的父類,是一個抽象類因為他是一個抽象類,所以無法實例化對象,所以我們需要使用它的子類對象FileWriterjava.io.FileWriter extends OutputStreamWriter extends Writer FileWriter:文件字符輸出流