Maison > Java > javaDidacticiel > le corps du texte

Comment utiliser DataInputStream et DataOutputStream de Java

WBOY
Libérer: 2023-04-28 18:40:16
avant
1833 Les gens l'ont consulté

Introduction

Dans le package io, deux flux d'opérations de données indépendants de la plate-forme sont fournis : le flux de sortie de données (DataOutputStream) et le flux d'entrée de données (DataInputStream).

Habituellement, le flux de sortie de données produira les données dans un certain format, puis les données seront lues dans un certain format via le flux d'entrée de données. DataOutputStream et DataOutputStream sont utilisés pour lire et écrire des données au format d'octet fixe.

DataOutputStream

Créer un objet

DataOutputStream out = new DataOutputStream(相接的流)
Copier après la connexion

MéthodeÉcrivez des données de type int dans le flux de sortie de données, et la couche inférieure écrit 4 octets dans le flux de sortie de base

writeInt(int i)
Copier après la connexion

Écrivez des données de type double dans la sortie de données stream, la couche inférieure convertira le double en un type long, l'écrira dans le flux de sortie de base et produira 8 octets

writeDouble(double d)
Copier après la connexion

Utilisation du codage utf-8 de manière indépendante de la machine pour écrire la chaîne dans le flux de sortie de base. Générez d'abord 2 octets représentant la longueur en octets de la chaîne, puis affichez ces valeurs d'octets

writeUTF()
Copier après la connexion

DataInputStream

Créer un objet

DataInputStream dis = new DataInputStream(InputStream in);
Copier après la connexion

MéthodeLire des données de type int à partir du flux d'entrée de données, lire 4 octets

readInt()
Copier après la connexion

Lire 8 octets

readDouble()
Copier après la connexion

Lisez d'abord 2 octets pour déterminer la longueur en octets de la chaîne, puis lisez ces valeurs d'octets

readUTF()
Copier après la connexion

Conseils :Fin de la lecture, une exception EOF se produira lors de la nouvelle lecture

Chestnut 1 : Écriture des données

public class Main {
    public static void main(String[] args) throws Exception {
        DataOutputStream out = new DataOutputStream(new FileOutputStream("d:/abc/f5"));
        out.writeInt(20211011);
        out.writeUTF("晴,18度");
        out.writeInt(20211012);
        out.writeUTF("晴,19度");
        out.writeInt(20211013);
        out.writeUTF("多云,17度");
        out.close();
    }
}
Copier après la connexion

Résultats d'exécution :

Comment utiliser DataInputStream et DataOutputStream de Java

Chestnut 2 : Lecture

public class Main {
    public static void main(String[] args) throws Exception {
        DataInputStream in = new DataInputStream(new FileInputStream("d:/abc/f5"));
        try {
            while (true) {
                int date = in.readInt();
                String s = in.readUTF();
                System.out.println(date);
                System.out.println(s);
            }
        } catch (EOFException e) {
            //正确读取结束,不需要处理
        }
        in.close();
    }
}
Copier après la connexion

Résultats d'exécution :

Comment utiliser DataInputStream et DataOutputStream de Java

Chestnut 3 : Sauvegarde des informations sur les élèves

Obligatoire pour enregistrer les informations sur les élèves dans les éléments suivants format

Numéro d'étudiant 00 00 00 01
Nom 00 03 61 62 63
Sexe 00 61
Âge 00 00 00 16

xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20dp">
    <EditText
        android:id="@+id/et1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="学号" />
    <EditText
        android:id="@+id/et2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="姓名" />
    <EditText
        android:id="@+id/et3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="性别" />

    <EditText
        android:id="@+id/et4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="年龄" />

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保存" />
    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="读取" />
    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp" />
</LinearLayout>
Copier après la connexion

java

public class IoActivity extends AppCompatActivity {
    private EditText et1;
    private EditText et2;
    private EditText et3;
    private EditText et4;
    private Button btn1;
    private Button btn2;
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_io);
        setViews();
        setListeners();
    }
    private void setViews() {
        et1 = findViewById(R.id.et1);
        et2 = findViewById(R.id.et2);
        et3 = findViewById(R.id.et3);
        et4 = findViewById(R.id.et4);
        btn1 = findViewById(R.id.btn1);
        btn2 = findViewById(R.id.btn2);
        tv = findViewById(R.id.tv);
    }
    private void setListeners() {
        btn1.setOnClickListener(view -> baocun());
        btn2.setOnClickListener(view -> duqu());
    }
    private void baocun() {
        //IO操作有IO异常,所以进行try...catch...
        /*
         *
         *           ┌DataOutputStream
         *    ┌FileOutputStream
         * sdcard
         */
        try {
            int id = Integer.parseInt(et1.getText().toString());
            String name = et2.getText().toString();
            String gender = et3.getText().toString();
            int age = Integer.parseInt(et4.getText().toString());

            DataOutputStream out = new DataOutputStream(
                    new FileOutputStream(getExternalFilesDir(null) + "/stu.txt", true)
            );
            out.writeInt(id);
            out.writeUTF(name);
            out.writeChar(gender.charAt(0));
            out.writeInt(age);
            out.close();

            Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }

    private void duqu() {
        //IO操作有IO异常,所以进行try...catch...
        try {
            DataInputStream in = new DataInputStream(
                    new FileInputStream(getExternalFilesDir(null) + "/stu.txt")
            );

            try {
                tv.setText("");
                while (true) {
                    int id = in.readInt();
                    String name = in.readUTF();
                    char gender = in.readChar();
                    int age = in.readInt();
                    tv.append("id:" + id + "\n" + "name:" + name + "\n" + "gender:" + gender + "\n" + "age:" + age + "\n");
                }
            } catch (EOFException e) {

            }
            in.close();
            Toast.makeText(this, "读取成功", Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            Toast.makeText(this, "读取失败", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }
}
Copier après la connexion

Exécutez le programme :

Comment utiliser DataInputStream et DataOutputStream de Java

Cliquez sur le bouton de lecture :

Comment utiliser DataInputStream et DataOutputStream de Java

getExternalFilesDir(null)obtenir le chemin suivant

/storage/emulated/0/Android/data/yourPackageName/files

Ce répertoire sera dans L'application est supprimée lors de sa désinstallation , et l'accès à ce répertoire ne nécessite pas d'application dynamique pour les autorisations de STOCKAGE.

Donc, l'exécution du programme générera un fichier stu.txt dans ce chemin

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal