JavaRush /Blog Jawa /Random-JV /Ngopi #169. Perbandingan jinis. Java.io - Operasi I/O ing...

Ngopi #169. Perbandingan jinis. Java.io - Operasi I/O ing Jawa

Diterbitake ing grup

Perbandingan jinis ing basa Jawa

Sumber: Theflashreads Ing kirim iki, sampeyan bakal sinau babagan sawetara jinis opsi perbandingan ing Jawa. Ngopi #169.  Perbandingan jinis.  Java.io - Operasi I/O ing Jawa - 1Cara sing paling umum kanggo nemtokake manawa obyek tartamtu minangka conto saka kelas, superclass, utawa antarmuka tartamtu yaiku nggunakake operator binary instanceof . Iku kalebu mriksa null implisit lan ngasilake kesalahan kompilasi-wektu yen jinis ora kaiket. Nanging, ora ngidini panggunaan primitif lan mbutuhake jinis kasebut dikenal ing wektu kompilasi.

Yen sampeyan perlu mriksa runtime dinamis

Ing kasus iki, gunakake metode boolean isInstance(Object obj) sing padha ing Class . Uga kalebu mriksa null, nanging ngidini primitif:
a instanceof B
    // returns false for null
    null instanceof B

    a.getClass().isInstance(b);
    // commonly used for generics
    Class<T> type = b.getClass();
    type.isInstance(a);

    // Note that the parameter is autoboxed to type Integer
    int x = 4;
    Integer.class.isInstance(x);

Priksa kompatibilitas rong jinis

Yen sampeyan kudu mriksa hubungan subtipe, gunakake metode boolean isAssignableFrom(Class<?> cls) ing Class . Iki bakal mbantu nyekel NullPointerException .
// is it possible to B b = new A()
   Class<?> aClass = CharSequence.class;
   Class<?> bClass = String.class;
   bClass.isAssignableFrom(aClass());

   // works for arrays
   CharSequence[].class.isAssignableFrom(String[].class); // true
   Integer[].class.isAssignableFrom(String[].class); //false

Pola Matching (Jawa 14)

if(a instanceof B b) {
       // b is casted
       b.toString();
   }

Jinis khusus

// Enums
    enum Color { WHITE, GRAY, BLACK }

    Color.class.isEnum(); // Enum.class.isAssignableFrom(Color.class);
    Color.WHITE instanceof Enum; // true

    // Arrays
    String[].class.isArray();
    // get the type of the variables in an array (null if obj is not an array)
    Class<?> componentType = obj.getComponentType();

    // Primitives
    int.class.isPrimitive();

Java.io - Operasi I/O ing Jawa

Sumber: Sedheng Isi artikel iki babagan operasi I/O ing Jawa. Ngopi #169.  Perbandingan jinis.  Java.io - Operasi I/O ing Jawa - 2Ing pangembangan aplikasi Android lan Java, input / output (Java I/O) minangka salah sawijining topik sing asring digunakake, nanging amarga sawetara alasan jarang kasebut. Nanging, orane katrangan saka aplikasi amba: contone, kita nindakake operasi I / O nalika ngowahi gambar bitmap kanggo format JPEG utawa nalika maca / nulis file biasa. Paket Java java.io nduweni kabeh kelas sing dibutuhake kanggo nindakake operasi I/O. Operasi kasebut ditindakake kanthi nggunakake benang. Sabanjure, thread mbantu nindakake operasi maca utawa nulis. Contone, nulis pesen menyang file.

Jinis-jinis lepen

Ana rong jinis serat ing basa Jawa:
  1. Byte Stream (Arus Byte)
  2. Aliran Karakter

Aliran byte

A Byte Stream digunakake kanggo maca lan nulis siji byte data. Iki kalebu kelas Java InputStream lan OutputStream . InputStream mbantu maca data lan OutputStream mbantu nulis data menyang target (bisa uga file).

Aliran karakter

Character Stream digunakake kanggo maca lan nulis siji karakter data. Iki kalebu kelas Reader lan Writer Java . Kanggo mangerteni Reader lan Writer , sampeyan kudu ngerti kelas asale kayata InputStreamReader , FileReader , OutputStreamWriter , FileWriter lan liya-liyane.

InputStream lan OutputStream

InputStream digunakake kanggo maca data saka sumber (bisa uga file). Iku ora migunani ing dhewe, nanging wis sawetara turunan kelas kayata FileInputStream , ByteArrayInputStream , lan ObjectInputStream . OutputStream digunakake kanggo nulis data menyang target (bisa uga file). Kelas asale yaiku FileOutputStream , ByteArrayOutputStream , lan ObjectOutputStream .
class InputOutput {

    data class Car(val name: String): java.io.Serializable

    fun fileStream() {
        //Create FileOutputStream that used for writing to file
        val outputStream = FileOutputStream("kotlin.txt")

        //write to output stream
        outputStream.write(1) //write a int
        outputStream.write("hello".toByteArray()) //write a string as byte array

        //Create FileInputStream that used for reading from file
        val inputStream = FileInputStream("kotlin.txt")

        //reading single first byte from input stream
        //output - 1
        println(inputStream.read())

        //reading string from input stream
        //output - hello
        val msg = String(inputStream.readBytes())
        println(msg)

        //close
        outputStream.close()
        inputStream.close()
    }

    fun byteArrayStream() {
        //Create ByteArrayOutputStream
        val outputStream = ByteArrayOutputStream()

        //write to output stream
        outputStream.write(1)
        outputStream.write("hello".toByteArray())

        //Create ByteArrayInputStream
        val readByteArray = outputStream.toByteArray()
        val inputStream = ByteArrayInputStream(readByteArray)

        //Reading a single byte from input stream
        //output - 1
        println(inputStream.read())

        //Reading string from input stream
        //output - hello
        val msg = String(inputStream.readBytes())
        println(msg)

        //close
        outputStream.close()
        inputStream.close()
    }

    fun objectStream() {
        //custom object
        val car = Car(name = "BMW")

        //Create ObjectOutputStream
        val fileOutputStream = FileOutputStream("kotlin.txt")
        val objOutputStream = ObjectOutputStream(fileOutputStream)

        //writing to output stream
        objOutputStream.writeObject(car)

        //Create ObjectInputStream
        val fileInputStream = FileInputStream("kotlin.txt")
        val objInputStream = ObjectInputStream(fileInputStream)

        //Reading from input stream
        val carObject = objInputStream.readObject() as Car
        println(carObject.name) //output - BMW

        //close
        fileOutputStream.close()
        objOutputStream.close()

        fileInputStream.close()
        objInputStream.close()
    }

    fun bufferStream() {
        //Buffer - Buffer is used for storing stream of data in Java I/O
        //BufferStream is faster way to write and read bytes in streams.

        //Create BufferOutputStream
        val fileOutputStream = FileOutputStream("kotlin.txt")
        val outputStream = BufferedOutputStream(fileOutputStream)

        //Write to output stream
        outputStream.write("hello".toByteArray())

        //flush() - Sending the data from BufferedOutputStream to main stream.
        //This is required to push changes to main stream.
        outputStream.flush()

        //Create BufferInputStream
        val fileInputStream = FileInputStream("kotlin.txt")
        val inputStream = BufferedInputStream(fileInputStream)

        //Reading from input stream
        val msg = String(inputStream.readBytes())
        println(msg)

        //close
        fileOutputStream.close()
        fileInputStream.close()
    }
}
Kajaba saka aliran ing ndhuwur, kita uga duwe DataInputStream lan DataOutputStream . Dheweke nindakake pakaryan sing padha karo benang liyane. Bentenane yaiku DataInput / OutputStream utamane digunakake kanggo maca / nulis jinis primitif, dene ObjectInput / OutputStream utamane digunakake kanggo obyek lan liya-liyane.

Pembaca lan Penulis

Ing Java I / O, yen kita maca / nulis data menyang stream, kita kudu ngowahi menyang bita dhisik. Mung banjur kita bisa maca utawa nulis menyang stream. InputStreamReader lan OutputStreamWriter nindakake iki kanthi otomatis.
class ReaderWriter {
    fun readerWriter() {
        //StreamReader or Writer:
        //It reads bytes and decodes them into characters using a specified charset.

        //Create OutputStreamWriter
        val outputStream = FileOutputStream("kotlin.txt")
        val writer = OutputStreamWriter(outputStream)

        //write to output stream
        writer.write("Hello Kotlin")
        writer.flush()

        //Create InputStreamReader
        val inputStream = FileInputStream("kotlin.txt")
        val reader = InputStreamReader(inputStream)

        //read from input stream
        //output - Hello Kotlin
        println(reader.readText())
    }
}

Paralel maca lan nulis

Kadhangkala kita butuh dhukungan multithreading ing Aliran. Cukup, kita pengin maca lan nulis menyang stream saka benang sing kapisah. Kanggo iki kita kudu nggunakake PipedInput / OutputStream .
fun pipedStream() {
       //Create PipedInput/OutputStream for parallel read/writes
       val inputStream = PipedInputStream()
       val outputStream = PipedOutputStream()

       //make a connection
       inputStream.connect(outputStream)

       //write from separate thread
       val writeThread = object : Thread() {
           override fun run() {
               try {
                   for (i in 0..100) {
                       outputStream.write(i)
                       println("Write : $i")
                       sleep(100)
                   }
               } catch (e: Exception) {
                   e.printStackTrace()
               }
           }
       }

       //read from another thread
       val readThread = object : Thread() {
           override fun run() {
               try {
                   for (i in 0..100) {
                       println("Read : ${inputStream.read()}")
                   }
               } catch (e: Exception) {
                   e.printStackTrace()
               }
           }
       }

       //start
       writeThread.start()
       readThread.start()
   }
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION